Oracle系统权限和角色权限都对用户的权限作了相应的限制,这也在一定程度上保护了数据库的访问安全。下面就让我们来一起了解一下。
Oracle系统权限
Oracle系统权限需要授予者有进行系统级活动的能力,如连接数据库,更改用户会话、建立表或建立用户等等。你可以在数据字典视图SYSTEM_PRIVILEGE_MAP上获得完整的系统权限。
对象权限
某一个用户可对其中的对象,直接授权给其它用户。
需注意的是,当某一个用户userA拥有查询其它用户userB下某个表tableA的视图viewA时,如userA用户需将viewA的查询权限授予userC,则必须同时将userB用户下tableA表的查询权限授予userC用户才可以。
对象权限和Oracle系统权限都通过GRANT语句授予用户或角色。需要注意的是在授予对象权限时语句应该是WITH GRANT OPTION子句,但在授予系统权象时语句是WITH ADMIN OPTION,所以在你试图授予系统权限时,使用语句WITH GRANT OPTION系统会报告一个错误:ONLY ADMIN OPTION can be specified。要特别注意这个语法和错误信息。
角色和角色权限
角色权限就是将属于用户的权限授予一个角色。任何权限都可以授予给一个角色。同时,一个角色可以授予另一个角色,但不能授予自己,也不能循环授权。
在会话期间通过SET ROLE语句授予或撤销角色权限。
在
PL/SQL块中使用
角色时,需要视其是否为匿名块、定义者权限还是调用者权限来决定。
1)在命名
PL/SQL块(存储过程、函数、触发器)按照定义者权限进行执行时,所有角色都会失效。执行过程中查询
SESSION_ROLES视图不会返回结果。
2)在命名PL/SQL块(存储过程、函数、触发器)按照调用者权限进行执行时,以及执行匿名PL/SQL块时,可以使用角色进行权限检查,也可以在块中使用动态SQL设置相应的角色(SET ROLE语句)。
授予和撤销权限
给用户或者角色授予权限使用GRANT 语句,GRANT语句的语法如下:
GRANT ROLE(或system privilege) TO user(role,Public) WITH ADMIN OPTION(可选)
对象权限被授予 WITH GRANT OPTION
涉及到权限的数据字典表主要有:
1、
SYSTEM_PRIVILEGE_MAP
系统中所有的系统权限列表。
2、
DBA_ROLES
系统中所有的角色列表。
3、数据库级权限列表
DBA_SYS_PRIVS
哪些用户或角色拥有哪些系统权限。
哪些用户或角色拥有哪些角色。
哪些用户或角色拥有哪些对象的什么具体权限,对象包括表、视图、过程、函数、包、类型等。
哪些用户或角色拥有哪些表的哪些列的什么权限,这些权限主要包括UPDATE、
REFERENCES。
4、用户级权限列表
当前用户拥有的系统权限。
当前用户拥有的角色权限。
作为对象的拥有者、对象权限的授予者、对象权限的被授予者,当前用户涉及到的相关对象权限。
作为对象的拥有者,当前用户涉及到的相关对象权限。
作为对象权限的被授予者,当前用户涉及到的相关对象权限。
作为列对象的拥有者、列对象权限的授予者、列对象权限的被授予者,当前用户涉及到的相关列对象权限。
作为列对象的拥有者,当前用户涉及到的相关列对象权限。
作为列对象权限的被授予者,当前用户涉及到的相关列对象权限。
5、ALL级权限列表
1)作为对象的拥有者、对象权限的授予者、对象权限的被授予者,当前用户涉及到的相关对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的对象权限。
作为对象的拥有者、对象权限的授予者,当前用户涉及到的相关对象权限。
1)作为对象权限的被授予者,当前用户涉及到的相关对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的对象权限。
1)作为列对象的拥有者、列对象权限的授予者、列对象权限的被授予者,当前用户涉及到的相关列对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的列对象权限。
作为列对象的拥有者、列对象权限的授予者,当前用户涉及到的相关列对象权限。
1)作为列对象权限的被授予者,当前用户涉及到的相关列对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的列对象权限。
6、角色级权限列表
当前用户下,哪些角色被授予了哪些角色。
当前用户下,哪些角色被授予了哪些系统权限。
当前用户下,哪些角色被授予了哪些对象权限。
7、会话级权限列表
当前用户所拥有的系统权限。
当前用户所拥有的角色。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/95233/viewspace-2121494/,如需转载,请注明出处,否则将追究法律责任。