1. 程式人生 > >Oracle 使用者,角色,許可權等

Oracle 使用者,角色,許可權等

許可權管理是 Oracle 系統的精華,不同使用者登入到同一資料庫中,可能看到不同數量的表,擁有不同的許可權。Oracle 的許可權分為系統許可權和資料物件許可權,共一百多種,如果單獨對使用者授權,很囧,有一些使用者需要的許可權是相同的,就把這些使用者歸為同一類——某種角色,通過設立一些有預定許可權的角色簡化和明確授權操作,角色出現的動機也就是為了簡化許可權管理,它是許可權的集合。一般做法是:系統把許可權賦給角色,然後把角色賦給使用者,當然也可以直接把某許可權賦給使用者。Oracle 提供細粒度的許可權,可以對錶的某一列單獨設定許可權,可以對某使用者查詢某表自動增添 where 限制條件。

許可權允許使用者訪問屬於其它使用者的物件或執行程式,ORACLE系統提供三種許可權:Object 物件級、System 系統級、Role 角色級。這些許可權可以授予給使用者、特殊使用者public或角色,如果授予一個許可權給特殊使用者"Public"(使用者public是oracle預定義的,每個使用者享有這個使用者享有的許可權),那麼就意味作將該許可權授予了該資料庫的所有使用者。對管理許可權而言,角色是一個工具,許可權能夠被授予給一個角色,角色也能被授予給另一個角色或使用者。使用者可以通過角色繼承許可權,除了管理許可權外角色服務沒有其它目的。許可權可以被授予,也可以用同樣的方式撤銷。

Oracle 的角色存放在表 dba_roles 中,某角色包含的系統許可權存放在  dba_sys_privs 中

,包含的物件許可權存放在 dba_tab_privs 中。
下面是“角色”、“使用者”和“許可權”的互查:

1. 使用者

例:

@>conn system/888888
Connected.
SYSTEM@userdata>create user user50 identified by user50;

User created.

SYSTEM@userdata>grant connect,resource to user50;

Grant
succeeded.

檢視當前登入使用者擁有的所有角色和系統許可權

USER50@userdata>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. USER50@userdata>select * from role_sys_privs; ROLE PRIVILEGE ADMIN_OPT ---------------- ------------------------ --------- RESOURCE CREATE SEQUENCE NO RESOURCE CREATE TRIGGER NO RESOURCE CREATE CLUSTER NO RESOURCE CREATE PROCEDURE NO RESOURCE CREATE TYPE NO CONNECT CREATE SESSION NO RESOURCE CREATE OPERATOR NO RESOURCE CREATE TABLE NO RESOURCE CREATE INDEXTYPE NO 9 rows selected.

檢視某一使用者所擁有的角色和系統許可權

SYSTEM@userdata>select * from dba_role_privs where GRANTEE='USER50';

GRANTEE                      GRANTED_ROLE       ADMIN_OPT DEFAULT_R
------------------------------ -------------------- --------- ---------
USER50                         RESOURCE          NO          YES
USER50                         CONNECT            NO          YES
SYSTEM@userdata>select * from dba_sys_privs where GRANTEE='USER50';

GRANTEE                         PRIVILEGE                     ADMIN_OPT
------------------------------ ------------------------------ ---------
USER50                          UNLIMITED TABLESPACE           NO

檢視某一使用者擁有的物件許可權

SYSTEM@userdata>grant select on scott.emp to user50;

SYSTEM@userdata>select * from dba_tab_privs where GRANTEE='USER50';

GRANTEE               OWNER           TABLE_NAME      GRANTOR         PRIVILEGE      GRANTABLE  HIERARCHY
-------------------- --------------- --------------- --------------- --------------- --------- ---------
USER50                SCOTT           EMP             SCOTT           SELECT         NO         NO

2. 許可權

  • 系統許可權:系統規定使用者使用資料庫的許可權。(系統許可權是對使用者而言)。
  • 物件許可權:某種許可權使用者對其它使用者的表或檢視的存取許可權。(是針對表或檢視而言的)。

2.1. 系統許可權管理

2.1.1 系統許可權分類

  • DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以建立資料庫結構。
  • RESOURCE:擁有Resource許可權的使用者只可以建立實體,不可以建立資料庫結構。
  • CONNECT:擁有Connect許可權的使用者只可以登入Oracle,不可以建立實體,不可以建立資料庫結構。

對於普通使用者:授予connect, resource許可權。
對於DBA管理使用者:授予connect,resource, dba許可權。

2.1.2 系統許可權授權命令

[系統許可權只能由DBA使用者授出:sys, system]
授權命令:SQL> grant connect, resource, dba to 使用者名稱1 [,使用者名稱2]...;

[普通使用者通過授權可以具有與system相同的使用者許可權,但永遠不能達到與sys使用者相同的許可權,system使用者的許可權也可以被回收。]

 2.1.3.許可權相關的檢視

與許可權,角色相關的檢視大概有下面這些:

       DBA_SYS_PRIVS: 查詢某個使用者所擁有的系統許可權

      USER_SYS_PRIVS:   當前使用者所擁有的系統許可權

      SESSION_PRIVS:     當前使用者所擁有的全部許可權

      ROLE_SYS_PRIVS:     某個角色所擁有的系統許可權

       注意: 要以SYS使用者登陸查詢這個檢視,否則返回空.

      ROLE_ROLE_PRIVS:    當前角色被賦予的角色

      SESSION_ROLES:      當前使用者被啟用的角色

      USER_ROLE_PRIVS:   當前使用者被授予的角色

      另外還有針對表的訪問許可權的檢視:

       TABLE_PRIVILEGES

        ALL_TAB_PRIVS   

       ROLE_TAB_PRIVS:     某個角色被賦予的相關表的許可權

3. 角色

3.1 何為角色
  角色。角色是一組許可權的集合,將角色賦給一個使用者,這個使用者就擁有了這個角色中的所有許可權。

3.2 系統預定義角色
  預定義角色是在資料庫安裝後,系統自動建立的一些常用的角色。下介簡單的介紹一下這些預定角色。角色所包含的許可權可以用以下語句查詢:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
這些預定義角色主要是為了向後相容。其主要是用於資料庫管理。oracle建議使用者自己設計資料庫管理和安全的許可權規劃,而不要簡單的使用這些預定角色。將來的版本中這些角色可能不會作為預定義角色。

 

2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
這些角色主要用於訪問資料字典檢視和包。

 

3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
這兩個角色用於資料匯入匯出工具的使用。

 

4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個角色用於oracle高階查詢功能。

 

5. SNMPAGENT
用於oracle enterprise manager和Intelligent Agent

 

6.RECOVERY_CATALOG_OWNER
用於建立擁有恢復庫的使用者。關於恢復庫的資訊,參考oracle文件《Oracle9i User-Managed Backup and Recovery Guide》

 

7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.

 

3.3 管理角色


1.建一個角色
sql>create role role1;


2.授權給角色
sql>grant create any table,create procedure to role1;


3.授予角色給使用者
sql>grant role1 to user1;


4.檢視角色所包含的許可權
sql>select * from role_sys_privs;


5.建立帶有口令的角色(在生效帶有口令的角色時必須提供口令)
sql>create role role1 identified by password1;


6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;


7.設定當前使用者要生效的角色
(注:角色的生效是一個什麼概念呢?假設使用者a有b1,b2,b3三個角色,那麼如果b1未生效,則b1所包含的許可權對於a來講是不擁有的,只有角色生效了,角色內的許可權才作用於使用者,最大可生效角色數由引數MAX_ENABLED_ROLES設定;在使用者登入後,oracle將所有直接賦給使用者的許可權和使用者預設角色中的許可權賦給使用者。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用帶有口令的role1生效
sql>set role all;//使用該使用者的所有角色生效
sql>set role none;//設定所有角色失效
sql>set role all except role1;//除role1外的該使用者的所有其它角色生效。
sql>select * from SESSION_ROLES;//檢視當前使用者的生效的角色。


8.修改指定使用者,設定其預設角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
詳見oracle參考文件


9.刪除角色
sql>drop role role1;
角色刪除後,原來擁用該角色的使用者就不再擁有該角色了,相應的許可權也就沒有了。

===================來自一澤漣漪的部落格,轉載請標明出處 www.cnblogs.com/ilifeilong===================

2. 許可權

  • 系統許可權:系統規定使用者使用資料庫的許可權。(系統許可權是對使用者而言)。
  • 物件許可權:某種許可權使用者對其它使用者的表或檢視的存取許可權。(是針對表或檢視而言的)。

2.1. 系統許可權管理

2.1.1 系統許可權分類

  • DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以建立資料庫結構。
  • RESOURCE:擁有Resource許可權的使用者只可以建立實體,不可以建立資料庫結構。
  • CONNECT:擁有Connect許可權的使用者只可以登入Oracle,不可以建立實體,不可以建立資料庫結構。

對於普通使用者:授予connect, resource許可權。
對於DBA管理使用者:授予connect,resource, dba許可權。

2.1.2 系統許可權授權命令

[系統許可權只能由DBA使用者授出:sys, system]
授權命令:SQL> grant connect, resource, dba to 使用者名稱1 [,使用者名稱2]...;

[普通使用者通過授權可以具有與system相同的使用者許可權,但永遠不能達到與sys使用者相同的許可權,system使用者的許可權也可以被回收。]

 2.1.3.許可權相關的檢視

與許可權,角色相關的檢視大概有下面這些:

       DBA_SYS_PRIVS: 查詢某個使用者所擁有的系統許可權

      USER_SYS_PRIVS:   當前使用者所擁有的系統許可權

      SESSION_PRIVS:     當前使用者所擁有的全部許可權

      ROLE_SYS_PRIVS:     某個角色所擁有的系統許可權

       注意: 要以SYS使用者登陸查詢這個檢視,否則返回空.

      ROLE_ROLE_PRIVS:    當前角色被賦予的角色

      SESSION_ROLES:      當前使用者被啟用的角色

      USER_ROLE_PRIVS:   當前使用者被授予的角色

      另外還有針對表的訪問許可權的檢視:

       TABLE_PRIVILEGES

        ALL_TAB_PRIVS   

       ROLE_TAB_PRIVS:     某個角色被賦予的相關表的許可權

3. 角色

3.1 何為角色
  角色。角色是一組許可權的集合,將角色賦給一個使用者,這個使用者就擁有了這個角色中的所有許可權。

3.2 系統預定義角色
  預定義角色是在資料庫安裝後,系統自動建立的一些常用的角色。下介簡單的介紹一下這些預定角色。角色所包含的許可權可以用以下語句查詢:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
這些預定義角色主要是為了向後相容。其主要是用於資料庫管理。oracle建議使用者自己設計資料庫管理和安全的許可權規劃,而不要簡單的使用這些預定角色。將來的版本中這些角色可能不會作為預定義角色。

 

2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
這些角色主要用於訪問資料字典檢視和包。

 

3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
這兩個角色用於資料匯入匯出工具的使用。

 

4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個角色用於oracle高階查詢功能。

 

5. SNMPAGENT
用於oracle enterprise manager和Intelligent Agent

 

6.RECOVERY_CATALOG_OWNER
用於建立擁有恢復庫的使用者。關於恢復庫的資訊,參考oracle文件《Oracle9i User-Managed Backup and Recovery Guide》

 

7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.

 

3.3 管理角色


1.建一個角色
sql>create role role1;


2.授權給角色
sql>grant create any table,create procedure to role1;


3.授予角色給使用者
sql>grant role1 to user1;


4.檢視角色所包含的許可權
sql>select * from role_sys_privs;


5.建立帶有口令的角色(在生效帶有口令的角色時必須提供口令)
sql>create role role1 identified by password1;


6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;


7.設定當前使用者要生效的角色
(注:角色的生效是一個什麼概念呢?假設使用者a有b1,b2,b3三個角色,那麼如果b1未生效,則b1所包含的許可權對於a來講是不擁有的,只有角色生效了,角色內的許可權才作用於使用者,最大可生效角色數由引數MAX_ENABLED_ROLES設定;在使用者登入後,oracle將所有直接賦給使用者的許可權和使用者預設角色中的許可權賦給使用者。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用帶有口令的role1生效
sql>set role all;//使用該使用者的所有角色生效
sql>set role none;//設定所有角色失效
sql>set role all except role1;//除role1外的該使用者的所有其它角色生效。
sql>select * from SESSION_ROLES;//檢視當前使用者的生效的角色。


8.修改指定使用者,設定其預設角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
詳見oracle參考文件


9.刪除角色
sql>drop role role1;
角色刪除後,原來擁用該角色的使用者就不再擁有該角色了,相應的許可權也就沒有了。