回收DBA角色的注意事項
Oracle對於許可權的劃分粒度非常精細,為了方便管理條目眾多許可權,Oracle引入了角色(role)這個邏輯概念,也在系統中預先設定了很多角色。在實際的應用中,應用使用者對於許可權的需要可能較為複雜,因此為了方便授權,很多應用使用者被授予DBA角色,DBA角色擁有較多的系統許可權,這對於資料庫的管理是非常不利的,違反了許可權最小化的安全原則。出於安全的考慮,系統可能需要回收DBA角色,在回收許可權的過程中,為了保證應用正常運行,需要注意一些細節,下文將對幾個需要注意的點進行討論。
實驗環境說明(本文中的結論適用於10g~11.2.0.4):
- SQL> select * from v$version;
- BANNER
- --------------------------------------------------------------------------------
- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
- PL/SQL Release 11.2.0.3.0 - Production
- CORE 11.2.0.3.0 Production
- TNS for Linux: Version 11.2.0.3.0 - Production
- NLSRTL Version 11.2.0.3.0 - Production
一、grant/revoke role操作的生效時間
- --建立一個新使用者,並授予connect角色
- session 1:
- SQL> create user darren identified by darren;
- User created.
- SQL> grant connect to darren;
- Grant succeeded.
- --使用新使用者登入資料庫
- session 2:
- SQL> conn darren/darren
- Connected.
- SQL> select * from session_privs;
- PRIVILEGE
- ----------------------------------------
- CREATE SESSION
- SQL> select * from session_roles;
- ROLE
- ------------------------------
- CONNECT
保持session 2不退出,在session 1中授予resource角色
- session 1:
- SQL> grant resource to darren;
- Grant succeeded.
- --session 2中查詢使用者擁有的系統許可權和角色
- SQL> select * from session_privs;
- PRIVILEGE
- ----------------------------------------
- CREATE SESSION
- UNLIMITED TABLESPACE --新增加的系統許可權
- SQL> select * from session_roles;
- ROLE
- ------------------------------
- CONNECT
退出session,重新登入使用者
- SQL> conn darren/darren
- Connected.
- SQL> select * from session_privs;
- PRIVILEGE
- ----------------------------------------
- CREATE SESSION
- UNLIMITED TABLESPACE
- CREATE TABLE
- CREATE CLUSTER
- CREATE SEQUENCE
- CREATE PROCEDURE
- CREATE TRIGGER
- CREATE TYPE
- CREATE OPERATOR
- CREATE INDEXTYPE
- 10 rows selected.
- SQL> select * from session_roles;
- ROLE
- ------------------------------
- CONNECT
- RESOURCE
結論:1、UNLIMITED TABLESPACE系統許可權會隨resource角色授予使用者,由於是作為單獨的系統許可權,因此會立即生效; 2、grant/revoke角色不會立即生效,需要使用set role或者重新登入才生效(直接授予系統許可權、對象許可權是立即生效)。
二、回收DBA角色時的影響 繼續上面的實驗,在session 1中授予和回收使用者DBA角色,session 2重新登入使用者
- session 1:
- SQL> grant dba to darren;
- Grant succeeded.
- SQL> revoke dba from darren;
- Revoke succeeded.
- session 2:
- SQL> conn darren/darren
- Connected.
- SQL> select count(*) from session_privs;
- COUNT(*)
- ----------
- 9
- SQL> select * from session_roles;
- ROLE
- ------------------------------
- CONNECT
- RESOURCE
- SQL> select * from session_privs; --注意,這裡沒有了UNLIMITED TABLESPACE許可權
- PRIVILEGE
- ----------------------------------------
- CREATE SESSION
- CREATE TABLE
- CREATE CLUSTER
- CREATE SEQUENCE
- CREATE PROCEDURE
- CREATE TRIGGER
- CREATE TYPE
- CREATE OPERATOR
- CREATE INDEXTYPE
在session 2中建立表並插入資料
- SQL> create table test1(a varchar2(20),b varchar2(10)); --這裡能建立成功是由於11g的延遲段建立特性,在這裡並沒有在資料表空間中實際產生segment
- Table created.
- SQL> insert into test1 values('a','b');
- insert into test1 values('a','b')
- *
- ERROR at line 1:
- ORA-01950: no privileges on tablespace 'USERS'
結論:1、在回收DBA角色時,UNLIMITED TABLESPACE許可權會被回收; 2、回收UNLIMITED TABLESPACE許可權後使用者的資料表空間quota立即耗盡,即無法使用tablespace的儲存空間。
三、回收DBA許可權後的處理
1、由於回收DBA許可權後使用者的UNLIMITED TABLESPACE系統許可權被回收,可以按下列方式之一給使用者授權,以便使用者能正常使用資料表空間:
- SQL> grant RESOURCE to DARREN;
- SQL> alter user DARREN quota unlimited on USERS;
- SQL> grant UNLIMITED TABLESPACE to DARREN;
2、如果應用使用者有特殊的許可權需求,需要在回收DBA角色後單獨為使用者授予部分系統許可權、對象許可權。
本文永久更新連結地址: