我对以下两个案例有点困惑,虽然我知道结果,但我不太相信背后的原因。需要数据库专家的帮助。
(例如)dba
创建角色ROLE1以及USER1和USER2 connect /as sysdba
create user USER1 identified by xyz;
create user USER2 identified by abc;
create role ROLE1;
案例1:
在没有admin选项的情况下授予ROLE1 ' select any table '权限
connect /as sysdba grant select any table to ROLE1;
将ROLE1授权给USER1,并使用admin选项
connect /as sysdba grant ROLE1 to USER1 with admin option;
USER1现在可以授予'select any privilege'给其他用户吗?
connect USER1/xyz grant select any table to USER2;
我在这里得到ORA-01031:不足特权错误,这意味着它不是正确的方式。
CASE 2:给ROLE1一个' select any table '的权限和admin选项
connect /as sysdba grant select any table to ROLE1 with admin option;
将ROLE1授予USER1,无论是否授予它w/或w/o admin选项
connect /as sysdba grant ROLE1 to USER1;
USER1现在可以授予'select any privilege'给其他用户吗?
connect USER1/xyz grant select any table to USER2;
这可以完美地工作而不会报告任何错误。
谁能帮助理解为什么CASE2起作用,为什么CASE1不起作用?
CASE1:
grant ROLE1 to USER1 with admin option;
意味着您可以将ROLE1
授予其他用户,而不管ROLE1
被授予了什么。因此,grant select any table to USER2;
不起作用。
但是,grant ROLE1 to USER2;
应该可以工作。
例2:
您获得权限(通过角色ROLE1
,就像DBA
角色获得权限一样)将select any table
授予其他用户。所以,grant select any table to USER2;
工作。
另一方面,grant ROLE1 to USER2;
应该失败