1. 程式人生 > >Oracle 用戶,角色,權限等

Oracle 用戶,角色,權限等

connect 沒有 權限 del intel cluster 登陸 select The

權限管理是 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;
角色刪除後,原來擁用該角色的用戶就不再擁有該角色了,相應的權限也就沒有了。

Oracle 用戶,角色,權限等