1. 程式人生 > >Oracle使用者、授權、角色管理

Oracle使用者、授權、角色管理

    建立和刪除使用者是Oracle使用者管理中的常見操作,但這其中隱含了Oracle資料庫系統的系統許可權與物件許可權方面的知識。掌握還Oracle使用者的授權操作和原理,可以有效提升我們的工作效率。 Oracle資料庫的許可權系統分為系統許可權與物件許可權。系統許可權( Database System Privilege )可以讓使用者執行特定的命令集。例如,CREATE TABLE許可權允許使用者建立表,GRANT ANY PRIVILEGE 許可權允許使用者授予任何系統許可權。物件許可權( Database Object Privilege )可以讓使用者能夠對各個物件進行某些操作。例如DELETE許可權允許使用者刪除表或檢視的行,SELECT許可權允許使用者通過select從表、檢視、序列(sequences)或快照 (snapshots)中查詢資訊。

  每個Oracle使用者都有一個名字和口令,並擁有一些由其建立的表、檢視和其他資源。Oracle角色(role)就是一組許可權(privilege)(或者是每個使用者根據其狀態和條件所需的訪問型別)。使用者可以給角色授予或賦予指定的許可權,然後將角色賦給相應的使用者。一個使用者也可以直接給其他使用者授權。

Oracle 許可權設定

一、許可權分類:系統許可權:系統規定使用者使用資料庫的許可權。(系統許可權是對使用者而言)。實體許可權:某種許可權使用者對其它使用者的表或檢視的存取許可權。(是針對表或檢視而言的)。二、系統許可權管理: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> connect system/managerSQL> Create user user50 identified by user50;SQL> grant connect, resource to user50;查詢使用者擁有哪裡許可權: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.employeeasselect * 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授予許可權的使用者來說,同樣還會取消這些使用者的相同許可權,也就是說取消授權時級聯的。Oracle 使用者管理

一、建立使用者的Profile檔案SQL> create profile student limit // student為資原始檔名FAILED_LOGIN_ATTEMPTS 3 //指定鎖定使用者的登入失敗次數PASSWORD_LOCK_TIME 5 //指定使用者被鎖定天數PASSWORD_LIFE_TIME 30 //指定口令可用天數二、建立使用者SQL> Create User usernameIdentified by passwordDefault Tablespace tablespaceTemporary Tablespace tablespaceProfile profileQuota integer/unlimited on tablespace;例:SQL> Create user acc01identified by acc01 // 如果密碼是數字,請用雙引號括起來default tablespace accounttemporary tablespace tempprofile defaultquota 50m on account;SQL> grant connect, resource to acc01;[*] 查詢使用者預設表空間、臨時表空間SQL> select username, default_tablespace, temporary_tablespace from dba_users;[*] 查詢系統資原始檔名:SQL> select * from dba_profiles;資原始檔類似表,一旦建立就會儲存在資料庫中。SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;SQL> create profile common limitfailed_login_attempts 5idle_time 5;SQL> Alter user acc01 profile common;三、修改使用者:SQL> Alter User 使用者名稱Identified 口令Default Tablespace tablespaceTemporary Tablespace tablespaceProfile profileQuota integer/unlimited on tablespace;1、修改口令字:SQL>Alter user acc01 identified by "12345";2、修改使用者預設表空間:SQL> Alter user acc01 default tablespace users;3、修改使用者臨時表空間SQL> Alter user acc01 temporary tablespace temp_data;4、強制使用者修改口令字:SQL> Alter user acc01 password expire;5、將使用者加鎖SQL> Alter user acc01 account lock; // 加鎖SQL> Alter user acc01 account unlock; // 解鎖四、刪除使用者SQL>drop user 使用者名稱; //使用者沒有建任何實體SQL> drop user 使用者名稱 CASCADE; // 將使用者及其所建實體全部刪除*1. 當前正連線的使用者不得刪除。五、監視使用者:1、查詢使用者會話資訊:SQL> select username, sid, serial#, machine from v$session;2、刪除使用者會話資訊:SQL> Alter system kill session 'sid, serial#';3、查詢使用者SQL語句:SQL> select user_name, sql_text from v$open_cursor;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_ROLEAQ:Advanced Query。這兩個角色用於oracle高階查詢功能。5. SNMPAGENT用於oracle enterprise manager和Intelligent Agent6.RECOVERY_CATALOG_OWNER用於建立擁有恢復庫的使用者。關於恢復庫的資訊,參考oracle文件《Oracle9i User-Managed Backup and Recovery Guide》7.HS_ADMIN_ROLEA 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)無法使用WITH GRANT OPTION為角色授予物件許可權2)可以使用WITH ADMIN OPTION 為角色授予系統許可權,取消時不是級聯

查詢使用者許可權資料字典1、動態資料字典是以v$xxx開始的資料字典,在資料庫中約有150個左右,這些資料字典反映資料庫動態執行狀況,在不同時間查詢會得到不同的結果。2、DBA資料字典是以DBA_xxx表示,該資料字典儲存資料庫結構,查詢DBA資料字典可以反映資料庫結構設定,管理磁碟空間和表空間、事務與回退段、使用者與表空間等資訊。3、使用者資料字典是以USER_xxx表示,這些資料字典反應使用者所建立的實體資訊。如,USER_TABLES、USER_VIEWS,資料庫管理員具有操作全體使用者所有實體的許可權,可以查詢這類資料字典,瞭解使用者所建立實體狀況,必要時可以將使用者建立的不正確的實體刪除。4、ALL_xxx類資料字典,表示使用者所建立的實體及使用者有權可以存取的實體。select privilege from dba_SYS_privs where grantee=‘USERNAME’Oracle查詢使用者許可權-- 確定角色的許可權select * from role_tab_privs ; 包含了授予角色的物件許可權select * from role_role_privs ; 包含了授予另一角色的角色select * from role_sys_privs ; 包含了授予角色的系統許可權-- 確定使用者帳戶所授予的許可權select * from DBA_tab_privs ; 直接授予使用者帳戶的物件許可權select * from DBA_role_privs ; 授予使用者帳戶的角色select * from DBA_sys_privs ; 授予使用者帳戶的系統許可權檢視當前使用者許可權:SQL> select * from session_privs;PRIVILEGE----------------------------------------CREATE SESSIONCREATE TABLECREATE CLUSTERCREATE SYNONYMCREATE VIEWCREATE SEQUENCECREATE PROCEDURECREATE TRIGGER8 rows selected.Oracle 本身的資料字典設計我個人覺得很合理, 因為DBA_xxx, ALL_xxx,USER_xxx 讓人一看大概就知道這個檢視是幹什麼用的. 本文簡要總結了一下與許可權,角色相關的檢視.一. 概述與許可權,角色相關的檢視大概有下面這些:DBA_SYS_PRIVS: 查詢某個使用者所擁有的系統許可權USER_SYS_PRIVS: 當前使用者所擁有的系統許可權SESSION_PRIVS: 當前使用者所擁有的全部許可權ROLE_SYS_PRIVS: 某個角色所擁有的系統許可權注意: 要以SYS使用者登陸查詢這個檢視,否則返回空.ROLE_ROLE_PRIVS: 當前角色被賦予的角色SESSION_ROLES: 當前使用者被啟用的角色USER_ROLE_PRIVS: 當前使用者被授予的角色另外還有針對表的訪問許可權的檢視:TABLE_PRIVILEGESALL_TAB_PRIVS ROLE_TAB_PRIVS: 某個角色被賦予的相關表的許可權...二. Examples1. 查詢當前使用者所擁有的許可權Select * from session_privs;2. 查詢某個使用者被賦予的系統許可權.可以有多種方式Select * from user_sys_privs;或者: select * from DBA_SYS_PRIVS where grantee='XXX'(需要當前使用者擁有DBA角色)3. 查詢當前使用者被授予的角色: 1. Select * from SESSION_ROLES order by ROLE說明: 這個查詢會返回當前使用者所被授予的全部角色, 其中包括巢狀授權的角色. 例如將DBA角色授予了一個使用者,DBA角色已經被授予的角色(例如 exp_full_database 和 imp_full_database)也會被查詢出來2. Select * from USER_ROLE_PRIVS4. 查詢某一角色被賦予的系統許可權Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role輸入 role='CONNECT'輸出:PRIVILEGE--------------------ALTER SESSIONCREATE CLUSTERCREATE DATABASE LINKCREATE SEQUENCECREATE SESSIONCREATE SYNONYMCREATE TABLECREATE VIEW5. 查詢當前角色被授予的角色 Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE輸入 role= 'DBA'輸出:GRANTED_ROLE----------------------DELETE_CATALOG_ROLEEXECUTE_CATALOG_ROLEEXP_FULL_DATABASEIMP_FULL_DATABASEPLUSTRACESELECT_CATALOG_ROLE說明: PLUSTRACE這個角色是用於執行SQL AUTO TRACE的, 通過執行$ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成這個角色.-------------------------------------------------------------------------------------------------------------------------------------------------------------如何檢視oracle使用者許可權?ORACLE資料字典檢視的種類分別為:USER,ALL 和 DBA。   USER_*:有關使用者所擁有的物件資訊,即使用者自己建立的物件資訊   ALL_*:有關使用者可以訪問的物件的資訊,即使用者自己建立的物件的資訊加上其他使用者建立的物件但該使用者有權訪問的資訊   DBA_*:有關整個資料庫中物件的資訊   (這裡的*可以為TABLES,INDEXES,OBJECTS,USERS等。)   1、檢視所有使用者   select * from dba_user;   select * from all_users;   select * from user_users;   2、檢視使用者系統許可權   select * from dba_sys_privs;   select * from all_sys_privs;   select * from user_sys_privs;   3、檢視使用者物件許可權   select * from dba_tab_privs;   select * from all_tab_privs;   select * from user_tab_privs;   4、檢視所有角色   select * from dba_roles;   5、檢視使用者所擁有的角色   select * from dba_role_privs;   select * from user_role_privs;   6、檢視當前使用者的預設表空間   select username,default_tablespace from user_users;   7、檢視某個角色的具體許可權   如grant connect,resource,create session,create view to TEST;   8、檢視RESOURCE具有那些許可權   用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';