角色(role)是系统权限(system privilege)和对象权限(object privilege)的集合。Oracle为了防止角色间的循环授予,自带了检测方法。演示在此。
1.清理测试环境
sys@ora10g> drop role role_secooler1;
sys@ora10g> drop role role_secooler2;
sys@ora10g> drop role role_secooler3;
2.准备测试环境
sys@ora10g> create role role_secooler1;
Role created.
sys@ora10g> create role role_secooler2;
Role created.
sys@ora10g> create role role_secooler3;
Role created.
3.测试角色的循环授予
sys@ora10g> grant role_secooler1 to role_secooler2;
Grant succeeded.
sys@ora10g> grant role_secooler2 to role_secooler3;
Grant succeeded.
sys@ora10g> grant role_secooler3 to role_secooler1;
grant role_secooler3 to role_secooler1
*
ERROR at line 1:
ORA-01934: circular role grant detected
OK,此时Oracle已经检测到系统中出现了角色循环授予的情况,在此以“ORA-01934”错误告知。
即便是在角色本身并未包含任何权限时这种循环授予也是被禁止的。
4.小结
在系统中使用角色(role)简化权限管理的同时一定要头脑清醒,不要引入过多的角色和过于复杂的角色。以简单、够用、方便为原则即可。
测试:也不能把角色给它自己
SQL> create role role1 identified by role1;
Role created.
SQL> grant role1 to role1;
grant role1 to role1
*
ERROR at line 1:
ORA-01934: circular role grant detected
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28743704/viewspace-765486/
,如需转载,请注明出处,否则将追究法律责任。