13.管理許可權(筆記)

tonykorn97發表於2006-04-19

13.管理許可權


建立使用者時,使用者沒有任何許可權,也不能執行任何操作.如果使用者要執行特定的資料庫操作,必須為其授予系統許可權.如果使用者要訪問其他方案的物件,則必須為其授予物件許可權.


許可權(Privilege)是指執行特定型別SQL命令或訪問其他方案物件的權利,許可權包括系統許可權和物件許可權兩種型別.系統許可權(System Privilege)是指執行特定型別SQL命令的權利,它用於控制使用者可以執行的一個或一組資料庫操作.常用的系統許可權:

CREATE SESSION 連線到資料庫

CREATE TABLE 建表

CREATE VIEW 建立檢視

CREATE PUBLIC SYNONYM 建立同義詞

CREATE SEQUENCE 建立序列

CREATE PROCEDURE 建立過程,函式和包

CREATE TRIGGER 建立觸發器

CREATE CLUSTER 建立簇

CREATE TYPE 建立物件型別

CREATE DATABASE LINK 建立資料庫鏈

另外,oracle還提供了一類ANY系統許可權,當使用者具有該類系統許可權時,可以在任何方案中執行相應操作.如果使用者具有SELECT ANY TABLE系統許可權,那麼使用者可以查詢任何方案的表.

需要注意,當初始化引數O7_DICTIONARY_ACCESSIBILITY被設定為FALSE時,除了SYSDBA和DBA使用者外,即使使用者具有SELECT ANY TABLE許可權,也不能訪問資料字典基表和資料字典檢視DBA_XXX.

物件許可權(Object privilege)是指訪問其他方案物件的權利,它用於控制使用者對其他方案物件的訪問.


管理系統許可權

授予系統許可權

GRANT system_priv[,system_priv,…]

To {user | role | PUBLIC},[,{user | role | PUBLIC} ] …

[WITH ADMIN OPTION];

System_priv用於指定系統許可權.授權使用者組PUBLIC,在授予系統許可權時可以帶有WITH ADMIN OPTION選項,帶有該選項後,被授權的使用者,角色還可以將相應的許可權授予其他使用者,角色.需要注意,系統許可權UNLIMITED TABLESPACE不能授予角色.

CRANT CREATE SESSION,CREATE TABLE TO blake WITH ADMIN OPTION;

GRANT GREATE VIEW TO blake;


顯示系統許可權.

1,顯示所有系統許可權.

SELECT name FROM system_privilege_map;

2,顯示使用者或角色所具有的系統許可權.

查詢資料字典檢視DBA_SYS_PRIVS,可以顯示所有使用者或角色所具有的系統許可權.透過查詢資料字典檢視USER_SYS_PRIVS,可以顯示當前使用者所具有的系統許可權.

SELECT * FROM dba_sys_privs WHERE GRANTEE=’BLAKE’;

GRANTEE用於標識許可權擁有者(使用者或角色),PRIVILEGE用於標識系統許可權.ADMIN_OPTION用於標識系統許可權傳授選項,其中YES表示可以轉授該系統許可權,NO表示不能轉授該系統許可權.

3,顯示當前會話所具有的系統許可權.

透過查詢資料字典檢視session_privs,可以顯示當前會話所具有的系統許可權.

SELECT * FROM session_privs;


收回系統許可權

收回系統許可權一般是由DBA完成的,如果要以其他使用者身份收回系統許可權,要求該使用者必須具有相應系統許可權及其轉授系統許可權選項(WITH ADMIN OPTION).收回系統許可權使用REVOKE命令完成.

REVOKE system_priv[,system_priv] ….

FROM {user | role | PUBLIC}[ , { user | role | public}]…

需要注意的是,系統許可權不會被級聯收回.


管理物件許可權.

物件許可權是指訪問其他使用者方案物件的權利,在oracle資料庫中,使用者可以直接訪問其方案物件,單如果要訪問其他使用者的方案物件時,必須具有相應的物件許可權.物件許可權包括ALTER ,DELETE,EXECUTE,INDEX,INSERT,REFERENCES,SELECT和UPDATE等8種.預設情況下,直接授予物件許可權時,將訪問所有列的許可權都授予使用者.如果只允許使用者更新某些列,必須授予列許可權.只能在INSERT,UPDATE和REFERENCES上授予列許可權.

授予或收回物件許可權時,可以使用AL L選項,執行GRANT ALL命令後,會將物件上的所有許可權授予使用者,而執行REVOKE ALL命令則可以收回物件上的所有許可權.如果不同方案表之間具有REFERENCES關係,使用REVOKE ALL收回主表上的所有物件許可權時需要帶由CASCADE CONSTRAINTS選項.

授予物件許可權:

GRANT {object_priv [{column_list}]

[,object_priv [{column_list}]]…

| ALL [PRIVILEGES]} ON [Schema.]object

TO {user | role |PUBLIC}[,{user | role | PUBLIC}]…

[WITH GRANT OPTION]


Column_list用於標識列許可權所對應列的列表.schema用於標識方案名.

1,授予ALTER 許可權

如果使用者在其他方案的表或序列上執行ALTER TABLE 或 ALTER SEQUENCE命令,必須具有ALTER 物件許可權.

GRANT ALTER ON emp TO blake;


2,授予EXECUTE許可權.

如果使用者要執行其他方案的包,過程和函式,必須在包,過程和函式上具有EXECUTE物件許可權.例如:為了使所有使用者都可以執行包DBMS_TRANSACTION,可以將執行該包的許可權授予PUBLIC

GRANT EXECUTE ON dbms_transaction TO public;

將EXECUTE ON dbms_transaction物件授予PUBLIC後,所有資料庫使用者都可以執行該包中的過程和函式.

Execute dbms_transaction.read_only;


3,授予INDEX許可權

如果使用者要在其他方案的表上建立索引,必須具有INDEX物件許可權.

GRANT INDEX ON scott.emp TO blake;

4,授予REFERENCES許可權.

使用者可以直接在其方案表之間定義主從關係.但在不同方案之間定義主從關係,必須將主表的REFERENCES物件許可權授予從表所對應的資料庫使用者.

GRANT REFERENCES ON dept TO blake;

5.授予列許可權.

列許可權用於控制使用者對其他方案物件列的訪問.只能在INSERT,UPDATE和REFERENCES上授予列許可權.直接授予物件許可權時,使用者可以訪問物件的所有列.假定執行授權操作GRANT UPDATE ON SCOTT.EMP TO BLACK,此時BLACKE可以更新SCOTT.EMP表上的所有列,為了使使用者BLAKE只能更新SAL列,必須為其授予列許可權.

GRANT UPDATE(sal) ON emp TO blake;

6,使用WITH GRANT OPTION選項.

WITH GRANT OPTION選項用於轉授物件許可權.該選項只能授予使用者,而不能授予角色.

Conn scott/tiger

GRANT SELECT ON emp TO blake WITH GRANT OPTION;

Conn blake/blake

GRANT SELECT ON scott.emp TO jones;

顯示物件許可權

1,顯示物件許可權.

資料字典檢視DBA_TAB_PRIVS,可以顯示所有使用者或角色的物件許可權資訊.

資料字典檢視ALL_TAB_PRIVS.可以顯示當前使用者或PUBLIC的物件許可權.

資料字典檢視USER_TAB_PRIVS.可以顯示當前使用者物件許可權的資訊.

下面以顯示BLAKE使用者被授予的所有許可權為例,說明使用資料字典檢視DBA_TAB_PRIVS的方法.

Conn system/manager

Col grantor format a10

Col object format a15

Col privilege format a10

SELECT grantor, owner ||’.’||table_name oject,privilege

FROM dba_tab_privs

WHERE grantee=’BLAKE’;

Grantor用於標識授權使用者,owner用於標識物件所有者,table_name用於標識資料庫物件,privilege用於標識物件許可權,grantee用於標識被授權的使用者或角色.


2,顯示列許可權.

資料字典檢視DBA_COL_PRIVS,顯示所有使用者或角色的列許可權資訊.

資料字典檢視ALL_COL_PRIVS,顯示當前使用者或PUBLIC的列許可權資訊;

資料字典檢視USER_COL_PRIVS,顯示當前使用者的列許可權資訊.

下面以顯示BLAKE使用者被授予的所有列許可權為例,說明使用資料字典檢視DBA_COL_PRIVS的方法.

Conn system/manager

Col owner format a10

Col table_column format a15

Col privilege format a10

SELECT owner,table_name||’.’||column_name table_column,

Privilege FROM dba_col_privs

WHERE grantee=’BLAKE’;

owner用於標識物件所有者,table_name用於標識資料庫物件,Column_name用於標識列名,privilege用於標識物件許可權,grantee用於標識被授權的使用者或角色.


3,顯示使用者授出的列許可權.

資料字典檢視ALL_COL_PRIVS_MADE,顯示物件所有者或授權使用者授出的所有列許可權.

資料字典檢視USER_COL_PRIVS_MADE,顯示當前使用者授出的所有列許可權.

SELECT grantee,privilege,table_name||’.’||column_name

Tab_column FROM user_col_privs_made;


4,顯示使用者所具有的許可權.

ALL_COL_PRIVS_RECD可以顯示使用者或PUBLIC組被授予的列許可權.

USER_COL_PRIVS_RECD可以顯示當前被授予的列許可權.

下面顯示BLAKE使用者被授予的列許可權為例,說明使用資料字典檢視ALL_COL_PRIVS_RECD的方法.

SELECT privilege, table_name||’.’||column_name tab_column,

Grantor FROM all_col_privs_recd WHERE grantee=’BLAKE’;


5,顯示使用者所授出的物件許可權.

ALL_TAB_PRIVS_MADE,可以顯示物件所有者或授權使用者所授出的所有物件許可權.

USER_TAB_PRIVS_MADE,可以顯示當前使用者所授出的所有物件許可權.


6,顯示使用者所具有的物件許可權

ALL_TAB_PRIVS_RECD可以顯示使用者或PUBLIC組被授予的物件許可權.

USER_TAB_PRIVS_RECD可以顯示當前使用者被授予的物件許可權.


收回物件許可權.

收回物件許可權一般情況下是有物件所有者完成的,如果已其他使用者身份收回物件許可權,則要求該使用者必須是許可權授予者

REVOKE { object_priv[, object_priv ] … | all [privileges]}

ON [schema.]object

FROM {user | role | PUBLIC} [, {user | role | PUBLIC} ] …

[CASCADE CONSTRAINTS];

Object_priv用於指定物件許可權,schema用於指定方案名,object用於指定物件名,user用於指定使用者名稱,role用於指定角色,PUBLIC用於指定PUBLIC使用者組.

收回了使用者所具有的物件許可權後,使用者將不能執行該物件許可權所對應的SQL命令

需要注意.物件許可權會被級聯收回.


例子:

REVOKE SELECT ON emp FROM blake;

若收回BLAKE使用者的許可權,也會級聯收回BLAKE授予其他使用者的許可權.

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

相關文章