oracle privilege不得不說的11一個資料字典檢視

pingley發表於2012-02-11
oracle privilege不得不說的11一個資料字典檢視

dba_roles
資料庫定義的所有的角色。
SQL> select count(*) from dba_roles;

  COUNT(*)
----------
        41
我本沒有建立什麼角色,oracle預置了很多角色,但是oracle不建議簡單依賴這些
預定義的角色,而應該根據自己需求自定義角色。

role_tab_privs
分配給角色的表許可權。這裡的包含的角色是可分配給使用者的。
(Information is provided only about roles to which the user has access.)
表結構解釋:
role:角色名。
owner:物件的屬主。
table_name:物件名。
column_name:列名,如果適用的話。
privilege:授予該角色的物件特權。
grantable:如果該角色帶有with admin option,該列是yes,否則是no。
檢視OEM_MONITOR的表許可權。下面是查詢的部分輸出。
SQL> select role,table_name,privilege,grantable
  2  from role_tab_privs
  3  where role='OEM_MONITOR';
ROLE                           TABLE_NAME                     PRIVILEGE                                GRANTABLE
------------------------------ ------------------------------ ---------------------------------------- ---------
OEM_MONITOR                    MGMT_HISTORY                   SELECT                                   NO
OEM_MONITOR                    BSLN_OBSERVATION_SET           EXECUTE                                  NO
OEM_MONITOR                    BSLN_TIMEGROUPS                SELECT                                   NO
OEM_MONITOR                    BSLN_STATISTICS                SELECT                                   NO
OEM_MONITOR                    BSLN                           EXECUTE                                  NO
OEM_MONITOR                    MGMT_BSLN_DATASOURCES          SELECT                                   NO
OEM_MONITOR                    MGMT_BSLN_THRESHOLD_PARMS      SELECT                                   NO

role_sys_privs
角色擁有的系統許可權
先建立一個測試角色
SQL> create role testrole;
Role created
SQL> grant create session,alter session,create table,
  2  create view,create synonym,create sequence 
  3  to testrole;
Grant succeeded

查詢role_sys_privs確定角色testrole的系統許可權。
SQL> select * from role_sys_privs
  2  where role='TESTROLE';
 
ROLE                           PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
TESTROLE                       CREATE SESSION                           NO
TESTROLE                       CREATE SYNONYM                           NO
TESTROLE                       CREATE VIEW                              NO
TESTROLE                       CREATE SEQUENCE                          NO
TESTROLE                       CREATE TABLE                             NO
TESTROLE                       ALTER SESSION                            NO
 
dba_role_privs
檢視角色分配給什麼物件了。
先將testrole角色分配給oracle11g使用者。
SQL> grant testrole to oracle11g;
Grant succeeded
SQL> select * from dba_role_privs
  2  where grantee='ORACLE11G';
GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ORACLE11G                      TESTROLE                       NO           YES
從查詢可以看出oracle11g使用者獲得了testrole角色的特權。

再建立一個角色用於測試
SQL> create role testrole1;
Role created
SQL> grant create trigger,create type,create procedure,create operator
  2  to testrole1;
Grant succeeded
SQL> grant testrole1 to testrole;
Grant succeeded

查詢獲得testrole1角色的物件。
SQL> select grantee,granted_role
  2  from dba_role_privs
  3  where granted_role='TESTROLE1';
GRANTEE                        GRANTED_ROLE
------------------------------ ------------------------------
TESTROLE                       TESTROLE1
SYS                            TESTROLE1

注:以上5個檢視的查詢只有DBA才能執行。

user_sys_privs
檢視當前使用者獲得的系統特權。
SQL> show user
User is "oracle11g"
SQL> select * from user_sys_privs;
USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
ORACLE11G                      CREATE SESSION                           NO
不包括從角色獲得的系統特權.create session是最初建立使用者的時候授予的。

user_tab_privs
檢視當前使用者的物件特權
SQL> show user
User is "oracle11g"
SQL> select grantee,table_name,privilege,grantable
  2  from user_tab_privs;
GRANTEE                        TABLE_NAME                     PRIVILEGE                                GRANTABLE
------------------------------ ------------------------------ ---------------------------------------- ---------
ORACLE11G                      EMPLOYEES                      SELECT                                   NO
從查詢可以看出oracle11g擁有hr.employees的查詢特權。

user_role_privs
檢視使用者當前分配到的角色
SQL> select username,granted_role,admin_option,default_role
  2  from user_role_privs;
 
USERNAME                       GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
ORACLE11G                      TESTROLE                       NO           YES
oracle11g使用者獲得了角色testrole,並且該角色是oracle11g使用者的預設角色。

session_roles
當前使用者當前啟用的角色
SQL> select * from session_roles;
ROLE
------------------------------
TESTROLE
TESTROLE1
testrole1是分配給testrole的。

session_privs
檢視當前使用者具有的特權。
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
CREATE TABLE
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR

role_tab_privs
檢視當前使用者具有的透過角色獲得的表特權。
先透過角色授權表特權.
SQL> create role tab_role;
Role created
SQL>  grant select,update on hr.employees to tab_role;
Grant succeeded
SQL> grant tab_role to oracle11g;
Grant succeeded
檢視透過角色獲得的表特權
SQL> select role,table_name,privilege
  2  from role_tab_privs;
ROLE                           TABLE_NAME                     PRIVILEGE
------------------------------ ------------------------------ ----------------------------------------
TAB_ROLE                       EMPLOYEES                      UPDATE
TAB_ROLE                       EMPLOYEES                      SELECT
 

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

相關文章