天天看點

Oracle_角色_權限詳細說明

一、Oracle内置角色connect與resource的權限

grant connect,resource to user; 

CONNECT角色: --是授予最終使用者的典型權利,最基本的 

ALTER SESSION --修改會話 

CREATE CLUSTER --建立聚簇 

CREATE DATABASE LINK --建立資料庫連結 

CREATE SEQUENCE --建立序列 

CREATE SESSION --建立會話 

CREATE SYNONYM --建立同義詞 

CREATE VIEW --建立視圖 

RESOURCE 角色: --是授予開發人員的 

CREATE CLUSTER --建立聚簇 

CREATE PROCEDURE --建立過程 

CREATE SEQUENCE --建立序列 

CREATE TABLE --建表 

CREATE TRIGGER --建立觸發器 

CREATE TYPE --建立類型 

從dba_sys_privs裡可以查到(注意這裡必須以DBA角色登入): 

select grantee,privilege from dba_sys_privs 

where grantee='RESOURCE' order by privilege; 

================================================= 

一、何為角色? 

    在前面的篇幅中說明權限和使用者。慢慢的在使用中你會發現一個問題:如果有一組人,他們的所需的權限是一樣的,當對他們的權限進行管理的時候會很不友善。因為你要對這組中的每個使用者的權限都進行管理。 有一個很好的解決辦法就是:角色。角色是一組權限的集合,将角色賦給一個使用者,這個使用者就擁有了這個角色中的所有權限。那麼上述問題就很好處理了,隻要第一次将角色賦給這一組使用者,接下來就隻要針對角色進行管理就可以了。 

以上是角色的一個典型用途。其實,隻要明白:角色就是一組權限的集合。

下面分兩個部分來對oracle角色進行說明。 

二、系統預定義角色 

預定義角色是在資料庫安裝後,系統自動建立的一些常用的角色。下介簡單的介紹一下這些預定角色。角色所包含的權限可以用以下語句查詢: 

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. 

二、管理角色 

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; 

角色删除後,原來擁用該角色的使用者就不再擁有該角色了,相應的權限也就沒有了。 

============================================================ 

一、權限分類: 

系統權限:系統規定使用者使用資料庫的權限。(系統權限是對使用者而言)。 

實體權限:某種權限使用者對其它使用者的表或視圖的存取權限。(是針對表或視圖而言的)。 

二、系統權限管理: 

1、系統權限分類: 

DBA: 擁有全部特權,是系統最高權限,隻有DBA才可以建立資料庫結構。 

RESOURCE:擁有Resource權限的使用者隻可以建立實體,不可以建立資料庫結構。 

CONNECT:擁有Connect權限的使用者隻可以登入Oracle,不可以建立實體,不可以建立資料庫結構。 

對于普通使用者:授予connect, resource權限。 

對于DBA管理使用者:授予connect,resource, dba權限。 

2、系統權限授權指令: 

[系統權限隻能由DBA使用者授出:sys, system(最開始隻能是這兩個使用者)] 

授權指令:SQL> grant connect, resource, dba to 使用者名1 [,使用者名2]...; 

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

查詢使用者擁有哪裡權限: 

SQL> select * from dba_role_privs; 

SQL> select * from dba_sys_privs; 

SQL> select * from role_sys_privs; 

删除使用者:SQL> drop user 使用者名 cascade; //加上cascade則将使用者連同其建立的東西全部删除 

3、系統權限傳遞: 

增加WITH ADMIN OPTION選項,則得到的權限可以傳遞。 

SQL> grant connect, resorce to user50 with admin option; //可以傳遞所獲權限。 

4、系統權限回收:系統權限隻能由DBA使用者回收 

指令:SQL> Revoke connect, resource from user50; 

說明: 

1)如果使用WITH ADMIN OPTION為某個使用者授予系統權限,那麼對于被這個使用者授予相同權限的所有使用者來說,取消該使用者的系統權限并不會級聯取消這些使用者的相同權限。

2)系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨使用者回收,即A可以直接收回C使用者的權限。 

三、實體權限管理 

1、實體權限分類:select, update, insert, alter, index, delete, all //all包括所有權限 ,execute //執行存儲過程權限 

user01: 

SQL> grant select, update, insert on product to user02; 

SQL> grant all on product to user02; 

user02: 

SQL> select * from user01.product; 

// 此時user02查user_tables,不包括user01.product這個表,但如果查all_tables則可以查到,因為他可以通路。 

2. 将表的操作權限授予全體使用者: 

SQL> grant all on product to public; // public表示是所有的使用者,這裡的all權限不包括drop。 

[實體權限資料字典]: 

SQL> select owner, table_name from all_tables; // 使用者可以查詢的表 

SQL> select table_name from user_tables; // 使用者建立的表 

SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 獲權可以存取的表(被授權的) 

SQL> select grantee, owner, table_name, privilege from user_tab_privs;   // 授出權限的表(授出的權限) 

3. DBA使用者可以操作全體使用者的任意基表(無需授權,包括删除): 

DBA使用者: 

SQL> Create table stud02.product( 

id number(10), 

name varchar2(20)); 

SQL> drop table stud02.emp; 

SQL> create table stud02.employee 

as 

select * from scott.emp; 

4. 實體權限傳遞(with grant option): 

user01: 

SQL> grant select, update on product to user02 with grant option; // user02得到權限,并可以傳遞。 

5. 實體權限回收: 

user01: 

SQL>Revoke select, update on product from user02; //傳遞的權限将全部丢失。 

說明 

1)如果取消某個使用者的對象權限,那麼對于這個使用者使用WITH GRANT OPTION授予權限的使用者來說,同樣還會取消這些使用者的相同權限,也就是說取消授權時級聯的。