Oracle 許可權(grant、revoke)

pursuer.chen發表於2016-10-26

資料庫版本:11GR2

一、介紹 

  在oracle中沒有其他資料庫系統中的資料庫的概念,物件都是建立在使用者下。當前使用者具有當前使用者下所有物件的所有許可權無論該物件是否是當前使用者所建立。舉個簡單例子建立一個使用者授予該使用者連線許可權,然後用管理員使用者在該使用者下建立一張表,該使用者可以刪除管理員在該使用者下建立的表。

 

二、許可權

許可權主要可以分成三類:系統許可權、角色、物件許可權。角色是一類許可權的分組。

1.系統許可權

系統許可權其實就是使用者在當前使用者架構下所具有的許可權。在11g中系統許可權有200個,比如create table,UNLIMITED TABLESPACE等。

查詢當前使用者擁有的系統許可權:

SELECT * FROM user_sys_privs;

2.角色

角色其實就是一類許可權的分組,所以給使用者分配角色其實也是在給使用者分配許可權。在oracle中有三個比較常用的角色。對於一般不是很嚴格的系統可以授予開發使用者CONNECT、RESOURCE角色許可權即可。

DBA:該角色具有資料庫所有的許可權。

CONNECT:該角色具有連線資料庫的許可權,和create session的許可權一樣。

RESOURCE:該角色是應用程式開發角色,具有如下許可權

 查詢當前使用者擁有的角色:

SELECT * FROM USER_ROLE_PRIVS;

3.物件許可權

物件許可權指的是其它擁有使用者的物件的許可權。其它使用者物件的許可權包括:SELECT,DELETE,UPDATE,ALTER,INSERT,INDEX,REFERENCES,FLASHBACK,DEBUG,QUERY REWRITE,ON COMMIT REFRESH;注意其它使用者物件的許可權沒有drop的許可權。 

查詢當前使用者擁有的物件許可權:

SELECT * FROM USER_TAB_PRIVS;

 當前使用者chenmh擁有使用者zhang下student表的所有許可權。

三、grant授權 

1.授予使用者connect、resource角色許可權。一般建立應用程式開發使用者可以授予這兩個角色的許可權。

GRANT CONNECT,RESOURCE TO zhang;

2.授予使用者chenmh使用者zhang下person表的SELECT,DELETE,UPDATE,INSERT許可權,授予具體的物件許可權是對於許可權嚴格控制的一種方案。

GRANT SELECT,DELETE,UPDATE,INSERT ON zhang.person TO CHENMH ;

 3.授予使用者chenmh使用者zhang下person表的所有許可權

GRANT ALL PRIVILEGES ON zhang.person to chenmh;

grant許可權圖表:

四、REVOKE回收許可權

1.回收角色許可權

REVOKE CONNECT,RESOURCE FROM chenmh;

2.回收系統許可權

REVOKE CREATE FROM chenmh;

3.回收使用者物件許可權,回收zhang使用者下person表的所有許可權,如果是單個授予的許可權需要單個的收回

REVOKE ALL PRIVILEGES ON zhang.person FROM chenmh;

revoke圖表:

五、批量操作

1.批量授予許可權,授予使用者chenmh擁有zhang下所有表的增刪改查許可權。生產批量執行sql

SELECT 'GRANT SELECT,DELETE,UPDATE,INSERT ON '||OWNER||'.'||TABLE_NAME||' TO CHENMH;' FROM dba_tables WHERE OWNER='ZHANG';

如果要查詢其它物件可以查詢dba_objects表。

2.批量收回系統許可權,收回使用者chenmh的所有系統許可權

SELECT 'REVOKE '||PRIVILEGE||' FROM CHENMH;'  FROM DBA_SYS_PRIVS WHERE GRANTEE='CHENMH';

將拼接的sql複製出來執行查詢。

3.批量收回角色許可權

SELECT 'REVOKE '||GRANTED_ROLE||' FROM CHENMH;' FROM DBA_ROLE_PRIVS WHERE GRANTEE='CHENMH';

4.批量收回使用者物件許可權,收回使用者chenmh在架構zhang下的所有許可權

SELECT 'REVOKE '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' FROM CHENMH;' FROM DBA_Tab_Privs WHERE GRANTEE='CHENMH' AND OWNER='ZHANG'
ORDER BY TABLE_NAME,PRIVILEGE;

 

 

備註:oracle使用者的檢視許可權比較特殊,需要單獨授予resource角色不包含建立檢視的許可權。可以執行

grant create view to chenmh;

 

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章