學習和管理oracle角色

paulyibinyi發表於2008-09-03
角色是相關許可權的命令的集合,使用角色的主要目的是簡化許可權管理.

預定義角色是oracle提供的角色,這些角色是在建立資料庫,安裝資料字典檢視何PL/SQL包時建立的,並且每種角色都用於執行一些特定管理任務.

1,CONNECT角色

CONNECT角色時在建立資料庫時,oracle執行指令碼SQL.BSQ自動建立的角色,該角色具有應用開發人員所需的多數許可權.CONNECT角色具有的所有系統許可權如下:

ALTER SESSION 修改會話引數設定

CREATE CLUSTER 建立簇

CREATE DATABASE LINK 建立資料庫鏈

CREATE SEQUENCE 建立序列

CREATE SESSION 建立會話(連線到資料庫)

CREATE PUBLIC SYNONYM 建立同義詞

CREATE TABLE 建表

CREATE VIEW 建立檢視


2,RECOURCE角色

RECOURCE 角色時在建立資料庫時,oracle執行指令碼SQL.BSQ自動建立的角色,該角色具有應用開發人員所需的其他許可權.如建立儲存過從,觸發器等.建立資料 庫使用者後,一般情況下只要給使用者授予CONNECT和RECOURCE角色就足夠了.需要注意的時,RECOURCE角色隱含具有UNLIMITED TABLESPACE系統許可權.

CREATE CLUSTER 建立簇

CREATE INDEXTYPE 建立索引型別

CREATE PROCEDURE 建立PL/SQL程式單元.

CREATE SEQUENCE 建立序列

CREATE TABLE 建表

CREATE TRIGGER 建立觸發器

CREATE TYPE 建立型別


3.DBA

該角色具有所有系統許可權和WITH ADMIN OPTION選項.預設的DBA使用者為SYSTEM,該使用者可以將系統許可權授予其他使用者,需要注意的是,DBA角色不具備SYSDBA和SYSOPER特權,而SYSDBA和SYSOPER自動具有DBA角色的所有許可權.


4,EXECUTE_CATALOG_ROLE

EXECUTE_CATELOG_ROLE角色提供了對所有系統PL/SQL包(DBA_XXX)的EXECUTE物件許可權


5,SELECT_CATALOG_ROLE

該角色提供了在所有資料字典(DBA_XXX)上的SELECT物件許可權.

6,DELETE_CATALOG_ROLE

該角色提供了系統審計表SYS.AUD$上的DELETE物件許可權.

7,EXP_FULL_DATABASE

該角色用於執行資料庫的匯出操作.該角色具有的許可權和角色為:

SELECT ANY TABLE 查詢任意表

BACKUP ANY TABLE 備份任意表

EXECUTE ANY PROCEDURE 執行任何過程,函式和包

EXECUTE ANY TYPE 執行任何物件型別

ADMINISTER RESOURCE MANAGER 管理資源管理器

EXECUTE_CATALOG_ROLE 執行任何PL/SQL系統包

SELECT_CATALOG_ROLE 查詢任何資料字典


8.IMP_FULL_DATABASE

該角色用於執行資料庫匯入操作,它包含了EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE角色和大量系統許可權.


9.RECOVERY_CATALOG_OWNER

該角色為恢復目錄所有者提供了系統許可權.

CREATE SESSION 建立會話

ALTER SESSION 修改會話引數設定

CREATE SYNONYM 建立同義詞

CREATE VIEW 建立檢視

CREATE DATABASE LINK 建立資料鏈

CREATE TABLE 建立表

CREATE CLUSTER 建立簇

CREATE SEQUENCE 建立序列

CREATE TRIGGER 建立出發器

CREATE PROCEDURE 建立過程,函式和包

自定義角色是在建立資料庫之後由DBA使用者建立的角色.該角色初始沒有任何許可權.為了使角色起作用,需要為其授予相應的許可權.角色不僅可以簡化許可權管理.而且透過禁止或啟用角色還可以控制許可權的可用性.


建立角色是使用CREATE ROLE命令完成的.可以指定角色的驗證方式(非驗證,資料庫驗證等)

1,建立角色時,如果部指定任何驗證方式,表示該角色使用非驗證方式:透過指定NOT IDENTIFIED選項可以指定非驗證方式.

CREATE ROLE public_role NOT IDENTIFIED;

2,資料庫驗證是使用資料庫來檢查角色,口令的方式.採用這種驗證方式時,角色名及口令存放在資料庫.啟用角色時,必須提供口令.對於使用者所私有的角色來說,建立角色時應為其提供口令.

CREATE ROLE private_role IDENTIFIED BY private;


建立角色時,角色沒有任何許可權,為了使角色可以完成特定任務,必須為其授予系統許可權和物件許可權.使用角色的目的是簡化許可權管理,為了是角色起作用,必須將角色授予使用者.

1,給角色授權.

給角色授權和給使用者授權沒有任何區別,需要注意,系統許可權UNLIMITED TABLESPACE 和物件許可權的WITH GRANT OPTION 選項不能授予角色.不能用一條GRANT語句同時授予系統許可權和物件許可權.例:

GRANT CREATE SESSION TO public_role WITH ADMIN OPTION;

GRANT SELECT ON scott.emp TO public_role;

GRANT INSERT, UPDATE, DELETE ON scott.emp TO PRIVATE_ROLE;


2,分配角色與授予系統許可權的命令完全相同.

例:

GRANT public_role, private_role TO blake WITH ADMIN OPTION;

啟用和禁止角色

啟用角色是指角色具有的許可權生效,禁止角色是指使角色具有的許可權臨時失效.

1,預設角色.

預設角色使使用者所具有角色的子集,當為使用者指定預設角色後,以該使用者身份登陸時會自動啟用起預設角色.語法如下:

ALTER USER user DEFAULT ROLE

{role [,role] … | ALL [EXCEPT role [,role] … ] | NONE }

ALL 表示將使用者具有的所有角色都設定為預設角色,NONE則表示不指定預設角色.


2,啟用和禁止角色.

設定了使用者的預設角色後,當以該使用者身份登陸時會自動啟用預設角色.

在SQL*PLUS中啟用或禁止角色是使用SET ROLE命令完成的,而在其他應用環境中可以使用過程DBMS_SESSION.SET_ROLE啟用或禁止角色.需要注意,啟用新角色會自動禁止先前角色.

如果角色未使用任何驗證方式,那麼可以直接啟用角色.例:

SET ROLE public_role;

或exec dbms_session.set_role(‘public_role’)

如果角色使用了資料庫驗證方式,那麼在啟用角色時必須提供口令.

SET ROLE private_role IDENTIFIED BY private;

或exec dbms_session.set_role(‘private_role INENTIFIED BY private’)

3,禁止角色.

SET ROLE NONE;

或exec dbms_session.set_role(‘NONE’)


修改角色是使用命令ALTER ROLE完成的.

修改驗證為非驗證:ALTER ROLE private_role NOT IDENTIFIED;

修改非驗證非驗證:ALTER ROLE public_role IDENTIFIED BY private;


刪除角色

DROP ROLE private_role;


1,顯示所有角色.

查詢資料字典DBA_ROLES,可以顯示資料庫所包含的所有角色.

SELECT * FROM dba_roles;

Role用於標識角色名,password用於標識角色驗證方式(NO標識採用非驗證方式,YES標識採用資料庫驗證方式)


2,顯示使用者所具有的角色及預設角色.

DBA_ROLE_PRIVS,可以顯示使用者或角色所具有的角色資訊.

ROLE_ROLE_PRIVS,可以顯示角色具有的其他角色資訊

USER_ROLE_PRIVS,可以顯示當前使用者所具有的角色.

SELECT granted_role, default_role from dba_role_privs WHERE grantee=’BLAKE’;

Granted_role標識已經被授予使用者的角色,default_role用於標識角色是否為使用者預設角色.


3,顯示角色所具有的系統許可權.

ROLE_SYS_PRIVS,顯示角色所具有的系統許可權.

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

SELECT privilege,admin_option FROM role_sys_privs WHERE role=’PUBLIC_ROLE’;

Privilege用於標識角色所具有的系統許可權,admin_option用於標識角色是否具有轉授相應系統許可權的許可權,role用於標識角色名.


4,顯示角色所具有的物件許可權.

DBA_TAB_PRIVS可以顯示使用者或角色所具有的物件許可權.

ROLE_TAB_PRIVS可以顯示角色所具有的物件許可權或列許可權

SELECT owner||’.’||table_name owner_table, privilege

FROM role_tab_privs

WHERE role=’PUBLIC_ROLE’;

Owner 用於標識物件所有者,table_name用於標識物件名,privilege用於標識角色所具有的物件許可權.role用於標識角色名.


5,顯示當前會話啟用的角色.

透過查詢資料字典檢視session_roles,可以顯示當前會話所啟用的角色.

SELECT * FROM session_roles;

OS角色是使用OS管理角色的方式,使用OS驗證方式管理角色時,過去給使用者授予的資料庫角色不再起任何作用.使用OS角色時,要遵守如下條件:

必須將初始化引數OS_ROLES設定為TRUE.需要注意,將該引數設定為TRUE後,過去授予使用者的角色不再起作用.

確保SQLNET.ORA檔案選項SQLNET.AUTHENTICATION_SERVICES的值為NTS.


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

相關文章