首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle用戶權限視圖全景指南:DBA/USER/SESSION/ROLE四大視圖族實戰查詢

     編輯:Oracle 資料庫基礎

權限視圖族系譜

視圖前綴可見範圍典型用途需求權限
DBA_*全庫審計、合規、故障排查SELECT_CATALOG_ROLE / DBA
ALL_*當前用戶可訪問開發自查CREATE SESSION
USER_*當前用戶擁有應用自服務CREATE SESSION
SESSION_*當前會話生效運行時調試CREATE SESSION
ROLE_*角色定義層面角色設計審計DBA / SELECT_CATALOG_ROLE

核心視圖清單與查詢示例

1. 系統權限視圖

-- 當前會話生效系統權限
SELECT * FROM SESSION_PRIVS ORDER BY PRIVILEGE;

-- 當前用戶直接授予系統權限
SELECT * FROM USER_SYS_PRIVS ORDER BY PRIVILEGE;

-- 指定用戶系統權限(需DBA)
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'APP_USER' ORDER BY PRIVILEGE;

-- 角色擁有的系統權限(需DBA)
SELECT PRIVILEGE FROM ROLE_SYS_PRIVS WHERE ROLE = 'APP_ADMIN';

2. 角色視圖

-- 當前會話激活角色
SELECT * FROM SESSION_ROLES ORDER BY ROLE;

-- 當前用戶被授予角色(含嵌套)
SELECT * FROM USER_ROLE_PRIVS ORDER BY GRANTED_ROLE;

-- 指定用戶角色(需DBA)
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'APP_USER';

-- 角色被授予的角色(嵌套)
SELECT GRANTED_ROLE FROM ROLE_ROLE_PRIVS WHERE ROLE = 'DBA';

3. 對象權限視圖

-- 當前用戶擁有的對象權限(授出/收到)
SELECT * FROM USER_TAB_PRIVS_MADE;   -- 我授予別人的
SELECT * FROM USER_TAB_PRIVS_RECD;   -- 別人授予我的

-- 全庫對象權限矩陣(需DBA)
SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE, GRANTABLE, HIERARCHY
FROM DBA_TAB_PRIVS
WHERE OWNER = 'SCHEMA_A'
ORDER BY GRANTEE, TABLE_NAME, PRIVILEGE;

4. 實戰案例:權限審計報表

-- 案例1:某用戶完整權限畫像
SELECT 'SYS_PRIV' type, PRIVILEGE name, 'YES' admin_option FROM DBA_SYS_PRIVS WHERE GRANTEE = 'APP_USER'
UNION ALL
SELECT 'ROLE', GRANTED_ROLE, ADMIN_OPTION FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'APP_USER'
UNION ALL
SELECT 'TAB_PRIV', TABLE_NAME, GRANTABLE FROM DBA_TAB_PRIVS WHERE GRANTEE = 'APP_USER'
ORDER BY 1, 2;

-- 案例2:某角色完整權限畫像(含嵌套角色展開)
WITH RECURSIVE role_tree(role, granted_role) AS (
  SELECT ROLE, GRANTED_ROLE FROM ROLE_ROLE_PRIVS WHERE ROLE = 'APP_ADMIN'
  UNION ALL
  SELECT rp.ROLE, rp.GRANTED_ROLE FROM ROLE_ROLE_PRIVS rp JOIN role_tree rt ON rp.ROLE = rt.GRANTED_ROLE
)
SELECT 'SYS_PRIV' type, PRIVILEGE name FROM ROLE_SYS_PRIVS WHERE ROLE IN (SELECT role FROM role_tree UNION SELECT 'APP_ADMIN' FROM DUAL)
UNION ALL
SELECT 'TAB_PRIV', TABLE_NAME || '.' || PRIVILEGE FROM ROLE_TAB_PRIVS WHERE ROLE IN (SELECT role FROM role_tree UNION SELECT 'APP_ADMIN' FROM DUAL);

5. 特權用戶視圖

-- 口令文件成員(SYSDBA/SYSOPER/SYSASM等)
SELECT * FROM V$PWFILE_USERS;
-- USERNAME | SYSDBA | SYSOPER | SYSASM | SYSBACKUP | SYSDG | SYSKM | CON_ID

視圖查詢最佳實踐

  1. 優先用USER_/SESSION_:無需特權,開發自助查詢。
  2. DBA_*需審計授權:納入SELECT_CATALOG_ROLE,按需分配,定期認證。
  3. 嵌套角色遞歸查詢:12c+使用WITH RECURSIVE,11g用CONNECT BY或PL/SQL循環。
  4. 對象權限矩陣導出:定期DBA_TAB_PRIVS全量導出CSV,離線分析/合規留存。

總結

權限視圖體系 = DBA(全局) / ALL(可見) / USER(自有) / SESSION(生效) / ROLE(定義) 五維矩陣。掌握SESSION_PRIVS(調試)、USER_ROLE_PRIVS(自查)、DBA_SYS_PRIVS/ROLE_PRIVS/TAB_PRIVS(審計)、V$PWFILE_USERS(特權),即可覆蓋95%權限排查場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved