项目组有一个需求,即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;
create user user_a identified by "Dameng123";
create schema schema_a authorization user_a;
/
grant resource,vti,soi,svi to user_a;
create user user_b identified by "Dameng123";
create schema schema_b authorization user_b;
/
grant resource,vti,soi,svi to user_b;
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));
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;
disql user_b/Dameng123
select * from schema_a.tab3;
select * from schema_a.tab2;
select * from schema_a.tab1;
// 无法查询到schema_a下的表
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"权限;
call sp_set_para_value(2,'GRANT_SCHEMA',1);
DmServiceDMSERVER restart
disql user_a/Dameng123
GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b;
//出现报错信息:
// 第1 行附近出现错误[-5567]:授权者没有此授权权限.
// 原因:
// 还需授予"GRANT ANY OBJECT PRIVILEGE"权限
disql sysdba
grant GRANT ANY OBJECT PRIVILEGE to user_a WITH ADMIN OPTION; ;
// 业务需求,需要进行转授,加上 WITH ADMIN OPTION; 子句
disql user_a/Dameng123
GRANT ALL PRIVILEGES ON SCHEMA schema_a TO user_b;
disql user_b/Dameng123
select * from schema_a.tab3;
select * from schema_a.tab2;
select * from schema_a.tab1;
结论:可实现
文章
阅读量
获赞