我对以下两个案例感到困惑,虽然我知道结果,但我不相信其背后的原因。需要数据库专家的帮助。
(Say)角色ROLE1与USER1和USER2一起由dba
创建 connect /as sysdba
create user USER1 identified by xyz;
create user USER2 identified by abc;
create role ROLE1;
案例1:
在没有管理员选项
的情况下,将“选择任何表”权限授予ROLE1 connect /as sysdba
grant select any table to ROLE1;
使用管理员选项
将ROLE1授予USER1 connect /as sysdba
grant ROLE1 to USER1 with admin option;
USER1现在可以向其他用户授予“选择任何权限”吗?
connect USER1/xyz
grant select any table to USER2;
我得到了ORA-01031:这里的权限不足,这意味着它不是正确的方法。
案例2:
使用管理员选项
向ROLE1授予“选择任何表”权限 connect /as sysdba
grant select any table to ROLE1 with admin option;
将ROLE1授予USER1,无论您是否授予w /或管理员选项
connect /as sysdba
grant ROLE1 to USER1;
USER1现在可以向其他用户授予“选择任何权限”吗?
connect USER1/xyz
grant select any table to USER2;
这可以很好地完成,而不会报告任何错误。
任何人都可以帮助理解为什么CASE2有效,为什么不能CASE1?
答案 0 :(得分:2)
<强> CASE1:强>
grant ROLE1 to USER1 with admin option;
表示您可以向其他用户授予ROLE1
,无论授予ROLE1
的是什么。因此grant select any table to USER2;
不起作用。
但是,grant ROLE1 to USER2;
应该有效。
<强> CASE2:强>
您获得权限(通过角色ROLE1
,如DBA
角色获取权限)将select any table
授予其他用户。所以,grant select any table to USER2;
有效。
另一方面,grant ROLE1 to USER2;
应该失败。