Oracle角色權限之Default Role

Oracle角色權限之Default Role 


    Oracle系統權限基礎是創建在三個維度層面上,即系統權限(System Privilege)、對象權限(Object Privilege)和角色權限(Role Privilege)。系統權限定義了用戶能夠執行的某些行爲操做;對象權限定義了用戶在某個系統對象(如數據表、視圖等)的操做權限;角色權限更像是一個容器對象,能夠將一組系統權限、對象權限甚至其餘角色權限容納到其中。linux

三個維度權限在三個層面上構建了Oracle權限體系框架。傳統應用系統的一種配置方式是在數據庫層面創建用戶,配置相關權限進行操做。這樣的系統還能夠在一些舊應用系統或者國外業務系統中看到。隨着Web應用的普遍使用,Oracle權限體系需求的複雜性實際上是在不斷下降的。Web應用一般只須要鏈接一個Schema用戶名便可,用戶體系是在應用層面加以實現。數據庫

最近筆者遇到一個關於角色Role的問題,最後發現是一個Default Role這個常常被忽視的設置出現問題。本文主要系統介紹一下這個特色功能。session

 

一、環境介紹框架

 

Oracle的權限體系在過去的版本中都在不斷地發展豐富,筆者討論基於Oracle 11g,具體版本號爲11.2.0.4。ide

 

 

SQL> select * from v$version;對象

BANNERit

--------------------------------------------------------------------------------io

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Productionasm

PL/SQL Release 11.2.0.4.0 - Productiontable

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

 

 

二、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。

 

三、相關權限變化

 

若是角色對象底層權限發生變化,已經受權對象有什麼影響呢?

 

 

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

 

 

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

 

四、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用戶角色都成爲非默認角色。也就是說:一旦進行顯式設置,其餘角色自動設置爲非默認角色。

 

五、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

 

 

六、結論

 

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  YESTEST                           TESTROLE                       NO  YESTEST                           CONNECT                        NO  YES  

相關文章
相關標籤/搜索