Oracle角色許可權之Default Role
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
一些相關實驗也證明,對於角色層面許可權組的變化,不會影響到使用者與角色的關係。
4、Default Role設定副效應
Default Role是可以單獨設定的,但是一定要注意,一旦使用Default Role顯式設定,會有一些副效應出現。
SQL> alter user test default role connect;
User altered
使用default role方法設定使用者test為connect,之後觀察檢視。
SQL> select * from dba_role_privs where GRANTEE='TEST';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
---------- ------------------------------ ------------ ------------
TEST RESOURCE NO NO
TEST SICSPCCGROLE NO NO
TEST SICSPCTBTRROLE NO NO
TEST TESTROLE NO NO
TEST CONNECT NO YES
TEST SICSPCTBCGROLE NO NO
TEST SICSPCTRROLE NO NO
7 rows selected
注意,除了設定預設角色的connect之後,其他test使用者角色都成為非預設角色。也就是說:一旦進行顯式設定,其他角色自動設定為非預設角色。
5、Default Role效果
設定之後,我們登入test進行效果觀察。
SQL> conn test/test@sicsdb_linux
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as test
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE OS_GRANTED
------------------------------ ------------------------------ ------------ ------------ ------------
TEST CONNECT NO YES NO
TEST RESOURCE NO NO NO
TEST SICSPCCGROLE NO NO NO
TEST SICSPCTBCGROLE NO NO NO
TEST SICSPCTBTRROLE NO NO NO
TEST SICSPCTRROLE NO NO NO
TEST TESTROLE NO NO NO
7 rows selected
在session層面,許可權如下:
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
登入之後,只有default role才能進行賦予,其他角色許可權不能自動新增。
--典型resource許可權
SQL> create table t (id number(10));
create table t (id number(10))
ORA-01031: 許可權不足
顯示設定角色許可權:
SQL> set role resource;
Role set
SQL> create table t (id number(10));
Table created
SQL> select * from session_roles;
ROLE
------------------------------
RESOURCE
設定其他角色之後,原有許可權不能使用。
SQL> select * from session_roles;
ROLE
------------------------------
TESTROLE
SQL> create table m (id number(10));
create table m (id number(10))
ORA-01031: 許可權不足
使用set role all,可以將所有角色許可權一併賦予。
SQL> set role all;
Role set
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
SICSPCCGROLE
SICSPCTRROLE
SICSPCTBCGROLE
SICSPCTBTRROLE
TESTROLE
7 rows selected
重新登入之後,依然是default role才能自動賦予。
SQL> conn test/test@sicsdb_linux
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as test
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
另外,使用set role all except xxx,可以將指定的role剔除。
SQL> set role all except resource;
Role set
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
SICSPCCGROLE
SICSPCTRROLE
SICSPCTBCGROLE
SICSPCTBTRROLE
TESTROLE
6 rows selected
6、結論
Oracle角色role許可權是一種非常常用的授權機制,default role特性是我們經常忽視的一個問題知識點。
LHR@orclasm > alter user test default role all;
User altered.
SYS@orclasm > select * from dba_role_privs where GRANTEE='TEST';
GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST RESOURCE NO YES
TEST TESTROLE NO YES
TEST CONNECT NO YES
About Me
...............................................................................................................................
● 本文整理自網路
● 本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● QQ群:230161599 微信群:私聊
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2017-06-02 09:00 ~ 2017-06-30 22:00 在魔都完成
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
...............................................................................................................................
拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2140769/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 角色許可權(Role)和系統許可權(System)的幾個澄清實驗
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- oracle實驗記錄 (許可權,role)Oracle
- Oracle 查詢許可權角色Oracle
- Oracle使用者角色許可權管理Oracle
- Oracle使用者、許可權、角色管理Oracle
- 聊聊Oracle Default RoleOracle
- [學習]ORACLE使用者、角色、許可權Oracle
- Oracle使用者、許可權、角色管理【轉】Oracle
- 資料庫安全之許可權與角色資料庫
- 檢視角色裡包含的系統許可權、物件許可權和角色物件
- Oracle資料庫使用者許可權控制 - Role - SynonymOracle資料庫
- Oracle 角色 自定義角色 RoleOracle
- oracle: default role 詳解(轉)Oracle
- 檢視Oracle使用者的許可權或角色Oracle
- Oracle角色、許可權的一些常用檢視Oracle
- Oracle內建角色connect與resource的許可權Oracle
- 許可權之選單許可權
- Java Web角色許可權設計JavaWeb
- Oracle使用者及角色的許可權管理[Oracle基礎]Oracle
- ORACLE許可權Oracle
- 【使用者管理】oracle使用者、角色、許可權管理Oracle
- 系統,物件,角色許可權簡析物件
- MySQL5.7&8.0許可權-角色管理MySql
- 如何檢視oracle使用者具有的許可權和角色Oracle
- oracle 許可權集合Oracle
- oracle 許可權管理Oracle
- Oracle許可權(一)Oracle
- oracle許可權全集Oracle
- 使用者角色許可權管理架構架構
- 系統、角色、物件相關許可權字典物件
- PostgreSQL學習手冊(角色和許可權)SQL
- Sql server 2005遷移至Oracle系列之五:角色、使用者、及許可權SQLServerOracle
- Oracle檢視使用者預設表空間、臨時表空間、系統許可權、物件許可權、角色許可權舉例說明Oracle物件
- MVC3 角色管理|MVC3許可權設計|MVC3分散式角色許可權管理MVC分散式
- Oracle12c多租戶管理使用者、角色、許可權Oracle
- Oracle使用者訪問許可權與PUBLIC角色的關係Oracle訪問許可權
- Oracle 使用者、物件許可權、系統許可權Oracle物件