注册
将模式权限授权给另外一个用户
专栏/技术分享/ 文章详情 /

将模式权限授权给另外一个用户

Fxj 2025/04/25 261 1 0
摘要

前言

项目组有一个需求,即A用户要对B用户下的b模式有增删改查权限,而不动到B用户下的其他模式的东西。
– 官方文档介绍:
– 当授权语句中使用了 ALL PRIVILEGES 时,会将指定的数据库对象上所有的对象权限都授予被授权者。
– 参考链接地址:https://eco.dameng.com/document/dm/zh-cn/pm/discretionary-access-control.html#3.3%20%E6%9D%83%E9%99%90%E7%9A%84%E5%88%86%E9%85%8D%E4%B8%8E%E5%9B%9E%E6%94%B6

验证: 将用户 user_a 下的模式(schema) schema_a 所有的对象权限都授权给用户 user_b; 授权SQL: GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b;

实验

1.创建用户 user_a 以及模式 schema_a

create user user_a identified by "Dameng123"; create schema schema_a authorization user_a; / grant resource,vti,soi,svi to user_a;

2.创建用户 user_b

create user user_b identified by "Dameng123"; create schema schema_b authorization user_b; / grant resource,vti,soi,svi to user_b;

3.在模式 schema_a 下创建一些表

disql user_a/Dameng123 create table schema_a.tab1( id int primary key, name varchar(20)); create table schema_a.tab2( id int primary key, name varchar(20)); create table schema_a.tab3( id int primary key, name varchar(20));

4.往表中插入数据

insert into schema_a.tab1 values(1,'aaa'); insert into schema_a.tab1 values(2,'bbb'); insert into schema_a.tab1 values(3,'ccc'); insert into schema_a.tab2 values(1,'ddd'); insert into schema_a.tab2 values(2,'eee'); insert into schema_a.tab2 values(3,'fff'); insert into schema_a.tab3 values(1,'ggg'); insert into schema_a.tab3 values(2,'hhh'); insert into schema_a.tab3 values(3,'jjj'); commit;

5.user_b查询验证

disql user_b/Dameng123 select * from schema_a.tab3; select * from schema_a.tab2; select * from schema_a.tab1; // 无法查询到schema_a下的表

6.执行授权语句

disql user_a/Dameng123 GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b with admin option;

//出现报错信息:
// 第1 行附近出现错误[-2201]:无效的数据库对象.
---- 官方文档解释如下(链接在头文):
– < 对象类型 > 中的 SCHEMA 必须和对象中的 < 模式名 > 配合使用,须提前开启 INI 参数 GRANT_SCHEMA=1,
表示为用授予该模式下所有对象的相应权限。授权用户需要具有对授权模式的"GRANT ANY OBJECT PRIVILEGE"权限;


7.设置参数

call sp_set_para_value(2,'GRANT_SCHEMA',1);

8.重启数据库

DmServiceDMSERVER restart

9.再次授权

disql user_a/Dameng123 GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b;

//出现报错信息:
// 第1 行附近出现错误[-5567]:授权者没有此授权权限.
// 原因:
// 还需授予"GRANT ANY OBJECT PRIVILEGE"权限

10.给用户授权GRANT ANY 权限

disql sysdba grant GRANT ANY OBJECT PRIVILEGE to user_a WITH ADMIN OPTION; ; // 业务需求,需要进行转授,加上 WITH ADMIN OPTION; 子句

11.再次授权

disql user_a/Dameng123 GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b;

12.user_b 验证

disql user_b/Dameng123 select * from schema_a.tab3; select * from schema_a.tab2; select * from schema_a.tab1;

结论:可实现

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服