Oracle Default Role 簡述
Oracle系統許可權基礎是建立在三個維度層面上,即系統許可權(System Privilege)、對象許可權(Object Privilege)和角色許可權(Role Privilege)。系統許可權定義了使用者可以執行的某些行為操作;對象許可權定義了使用者在某個系統對象(如資料表、視圖等)的操作許可權;角色許可權更像是一個容器物件,可以將一組系統許可權、對象許可權甚至其他角色許可權容納到其中。
三個維度許可權在三個層面上構建了Oracle許可權體系架構。傳統應用系統的一種配置方式是在資料庫層面建立使用者,配置相關許可權進行操作。這樣的系統還可以在一些舊應用系統或者國外業務系統中看到。隨著Web應用的廣泛使用,Oracle許可權體系需求的複雜性其實是在不斷降低的。Web應用通常只需要串連一個Schema使用者名稱即可,使用者體系是在應用程式層面加以實現。
最近筆者遇到一個關於角色Role的問題,最後發現是一個Default Role這個經常被忽視的設定出現問題。本文主要系統介紹一下這個特點功能。
1、環境介紹
Oracle的許可權體系在過去的版本中都在不斷地發展豐富,筆者討論基於Oracle 11g,具體版本號碼為11.2.0.4。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production
建立一個全新的使用者。
SQL> create user test identified by test;
User created
2、Default Role概論
和系統許可權、對象許可權相比,角色許可權是比較特殊的一種權限類別型。它更像是一種組合容器,可以將其他許可權以組Group的方式進行組織。一般來說,角色許可權Role Privilege最常用的情境是簡化管理難度,實現標準化組態管理。另一個角色許可權的特點是動態賦予。系統許可權和對象許可權一旦賦予,使用者只要登入就直接獲得。而對象許可權在這個問題上是可以選擇的。
首先我們進行預設設定,對使用者test進行一系列角色賦予動作。
SQL> grant connect, resource to test;
Grant succeeded
SQL> grant sicspccgrole to test;
Grant succeeded
SQL> grant sicspctbcgrole to test;
Grant succeeded
SQL> grant sicspctrrole to test;
Grant succeeded
通過視圖db_role_privs,可以查看到角色與授予關係。
SQL> select * from dba_role_privs where GRANTEE='TEST';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
TEST RESOURCE NO YES
TEST SICSPCCGROLE NO YES
TEST SICSPCTBTRROLE NO YES
TEST CONNECT NO YES
TEST SICSPCTBCGROLE NO YES
TEST SICSPCTRROLE NO YES
6 rows selected
重點關注default_role列,對應test的幾個許可權,都被授予為default_role。換而言之,一個使用者被賦予角色之後,直接就是預設角色即default role。
3、相關許可權變化
如果角色對象底層許可權發生變化,已經授權對象有什麼影響呢?
SQL> create role testrole ;
Role created
SQL> grant select on sics.cnu_environment to testrole;
Grant succeeded
SQL> grant testrole to test;
Grant succeeded
此時新角色testrole被授予為default role。
SQL> select * from dba_role_privs where GRANTEE='TEST';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
TEST RESOURCE NO YES
TEST SICSPCCGROLE NO YES
TEST SICSPCTBTRROLE NO YES
TEST TESTROLE NO YES
TEST CONNECT NO YES
TEST SICSPCTBCGROLE NO YES
TEST SICSPCTRROLE NO YES
7 rows selected
Testrole底層發生變化。
SQL> grant select on scott.emp to testrole;
Grant succeeded
角色授權關係沒有變化。
SQL> select * from dba_role_privs where GRANTEE='TEST';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
TEST RESOURCE NO YES
TEST SICSPCCGROLE NO YES
TEST SICSPCTBTRROLE NO YES
TEST TESTROLE NO YES
TEST CONNECT NO YES
TEST SICSPCTBCGROLE NO YES
TEST SICSPCTRROLE NO YES
7 rows selected
一些相關實驗也證明,對於角色層面許可權組的變化,不會影響到使用者與角色的關係。
更多詳情見請繼續閱讀下一頁的精彩內容: