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
哪些用户或角色拥有哪些系统权限。
DBA_ROLE_PRIVS
哪些用户或角色拥有哪些角色。
DBA_TAB_PRIVS
哪些用户或角色拥有哪些对象的什么具体权限,对象包括表、视图、过程、函数、包、类型等。
DBA_COL_PRIVS
哪些用户或角色拥有哪些表的哪些列的什么权限,这些权限主要包括UPDATE、REFERENCES。
4、用户级权限列表
USER_SYS_PRIVS
当前用户拥有的系统权限。
USER_ROLE_PRIVS
当前用户拥有的角色权限。
USER_TAB_PRIVS
作为对象的拥有者、对象权限的授予者、对象权限的被授予者,当前用户涉及到的相关对象权限。
USER_TAB_PRIVS_MADE
作为对象的拥有者,当前用户涉及到的相关对象权限。
USER_TAB_PRIVS_RECD
作为对象权限的被授予者,当前用户涉及到的相关对象权限。
USER_COL_PRIVS
作为列对象的拥有者、列对象权限的授予者、列对象权限的被授予者,当前用户涉及到的相关列对象权限。
USER_COL_PRIVS_MADE
作为列对象的拥有者,当前用户涉及到的相关列对象权限。
USER_COL_PRIVS_RECD
作为列对象权限的被授予者,当前用户涉及到的相关列对象权限。
5、ALL级权限列表
ALL_TAB_PRIVS
1)作为对象的拥有者、对象权限的授予者、对象权限的被授予者,当前用户涉及到的相关对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的对象权限。
ALL_TAB_PRIVS_MADE
作为对象的拥有者、对象权限的授予者,当前用户涉及到的相关对象权限。
ALL_TAB_PRIVS_RECD
1)作为对象权限的被授予者,当前用户涉及到的相关对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的对象权限。
ALL_COL_PRIVS
1)作为列对象的拥有者、列对象权限的授予者、列对象权限的被授予者,当前用户涉及到的相关列对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的列对象权限。
ALL_COL_PRIVS_MADE
作为列对象的拥有者、列对象权限的授予者,当前用户涉及到的相关列对象权限。
ALL_COL_PRIVS_RECD
1)作为列对象权限的被授予者,当前用户涉及到的相关列对象权限。
2)当前用户的所属角色(包括PUBLIC角色)所拥有的列对象权限。
6、角色级权限列表
ROLE_ROLE_PRIVS
当前用户下,哪些角色被授予了哪些角色。
ROLE_SYS_PRIVS
当前用户下,哪些角色被授予了哪些系统权限。
ROLE_TAB_PRIVS
当前用户下,哪些角色被授予了哪些对象权限。
7、会话级权限列表
SESSION_PRIVS
当前用户所拥有的系统权限。
SESSION_ROLES
当前用户所拥有的角色。