Oracle角色許可權之Default Role

lhrbest發表於2017-06-15

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

 

 

2Default 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

 

 

一些相關實驗也證明,對於角色層面許可權組的變化,不會影響到使用者與角色的關係。

 

4Default Role設定副效應

 

Default Role是可以單獨設定的,但是一定要注意,一旦使用Default Role顯式設定,會有一些副效應出現。

 

 

SQL> alter user test default role connect;

User altered

 

 

使用default role方法設定使用者testconnect,之後觀察檢視。

 

 

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使用者角色都成為非預設角色。也就是說:一旦進行顯式設定,其他角色自動設定為非預設角色。

 

5Default 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群,學習最實用的資料庫技術。

Oracle角色許可權之Default Role
DBA筆試面試講解
歡迎與我聯絡

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2140769/,如需轉載,請註明出處,否則將追究法律責任。

相關文章