階級性和特權
範例——有三個用戶test1,test2,test3, 三個用戶都具有DBA色色權限。
用TEST1用戶創建一個表T1,並將其查詢權限授予TEST2;
用TEST2用戶創建一個視圖,視圖的基表是TEST1.T1,並將查詢權限授予TEST3
1.授權
1.1. 視圖中,類似於定義者權限的存儲過程,是屏蔽了角色權限的。比如如果TEST1沒有顯式地將T1表的SELECT權限給予TEST2,那麼TEST2在創建視圖V_T1時也會報ORA-01031錯誤,即使TEST2用戶擁有DBA角色權限。
grant select on v_t1 to test3;
1.2.如果在用戶test2的視圖中,引用了其他用戶test1的表,用戶test2將視圖的訪問權限給予用戶test3,那麼就變相地將用戶test1的表的訪問權限給予了用戶test3,因此,用戶test2必須有將用戶test1的表的訪問權限轉授用戶test3,也就是用戶test1在授予test2權限時,必須使用with grant option。
grant select on t1 to a with grant option;
*由於有SELECT ANY TABLE權限的存在,所有的用戶表都可以被訪問。但是顯式授予表的權限時,似乎表的權限有更高的優先級,並且沒有跟系統權限和角色權限進行結合。
2.權限的查看
2.1:與權限,角色相關的視圖大概有下面這些:
DBA_SYS_PRIVS: 查詢某個用戶所擁有的系統權限 USER_SYS_PRIVS: 當前用戶所擁有的系統權限
SESSION_PRIVS: 當前用戶所擁有的全部權限 ROLE_SYS_PRIVS: 某個角色所擁有的系統權限
注意: 要以SYS用戶登陸查詢這個視圖,否則返回空. ROLE_ROLE_PRIVS: 當前角色被賦予的角色
SESSION_ROLES: 當前用戶被激活的角色 USER_ROLE_PRIVS: 當前用戶被授予的角色
2.2:另外還有針對表的訪問權限的視圖:
TABLE_PRIVILEGES ALL_TAB_PRIVS ROLE_TAB_PRIVS: 某個角色被賦予的相關表的權限