天天看點

Oracle查詢使用者權限角色(dba_sys_privs)Oracle查詢使用者權限

Oracle查詢使用者權限

資料字典

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 SESSION

CREATE TABLE

CREATE CLUSTER

CREATE SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

8 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_PRIVILEGES

        ALL_TAB_PRIVS   

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

       ...   

二. Examples

   1. 查詢目前使用者所擁有的權限

               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_PRIVS       

   4. 查詢某一角色被賦予的系統權限

           Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role

        輸入 role='CONNECT'

         輸出:

           PRIVILEGE

           --------------------

          ALTER SESSION

            CREATE CLUSTER

            CREATE DATABASE LINK

            CREATE SEQUENCE

            CREATE SESSION

            CREATE SYNONYM

            CREATE TABLE

            CREATE VIEW

 5. 查詢目前角色被授予的角色

         Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE

         輸入 role= 'DBA'

          輸出:

           GRANTED_ROLE

           ----------------------

          DELETE_CATALOG_ROLE

            EXECUTE_CATALOG_ROLE

            EXP_FULL_DATABASE

            IMP_FULL_DATABASE

            PLUSTRACE

            SELECT_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';