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

Oracle 權限數據字典深度解析:DBA_TAB_PRIVS 與相關視圖完整對照表

     編輯:Oracle 資料庫基礎

查詢使用者對物件權限的核心視圖為 `DBA_TAB_PRIVS`。本文詳細解析其欄位含義、GRANT/REVOKE 語法對應關係,並提供 15 個相關權限視圖的分類對照表,助你快速定位所需權限資訊。

核心視圖:DBA_TAB_PRIVS 結構

欄位名型別Null?說明
GRANTEEVARCHAR2(30)NOT NULL權限獲得者 (使用者/角色)
OWNERVARCHAR2(30)NOT NULL物件擁有者
TABLE_NAMEVARCHAR2(30)NOT NULL物件名稱 (表/視圖/序列/程序等)
GRANTORVARCHAR2(30)NOT NULL權限授予者
PRIVILEGEVARCHAR2(40)NOT NULL權限類型 (SELECT, INSERT, UPDATE, DELETE, REFERENCES, EXECUTE 等)
GRANTABLEVARCHAR2(3)YES/NO:獲得者是否可將此權限再授予他人 (WITH GRANT OPTION)

權限授予/收回語法對應

-- 授予
GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON my_table TO user_joe;
GRANT CREATE PUBLIC SYNONYM TO user_joe;  -- 系統權限

-- 收回
REVOKE INSERT, DELETE ON my_table FROM user_joe;

15 大權限相關數據字典分類對照

視圖名稱範圍用途關鍵差異
DBA_TAB_PRIVS全資料庫所有物件權限DBA 權限查看
ALL_TAB_PRIVS可存取當前使用者可存取的物件權限含自身擁有+被授予
ALL_TAB_PRIVS_MADE可存取當前使用者**授予他人**的物件權限GRANTOR = 當前用戶
ALL_TAB_PRIVS_RECD可存取當前使用者**從他人獲得**的物件權限GRANTEE = 當前用戶
USER_TAB_PRIVS自身當前使用者擁有物件的權限OWNER = 當前用戶
USER_TAB_PRIVS_MADE自身當前使用者授予他人的權限
USER_TAB_PRIVS_RECD自身當前使用者獲得的權限
DBA_SYS_PRIVS全資料庫所有系統權限 (CREATE TABLE, ALTER SYSTEM 等)
USER_SYS_PRIVS自身當前使用者的系統權限
DBA_ROLE_PRIVS全資料庫所有角色授予關係 (GRANTED_ROLE, GRANTEE)
USER_ROLE_PRIVS自身當前使用者擁有的角色
ROLE_ROLE_PRIVS角色角色被授予的角色 (角色嵌套)
ROLE_SYS_PRIVS角色角色擁有的系統權限
ROLE_TAB_PRIVS角色角色擁有的物件權限
SESSION_PRIVS會話當前會話啟用的系統權限 (含角色繼承)即時生效權限
SESSION_ROLES會話當前會話啟用的角色即時生效角色

實務查詢範例

1. 查詢特定用戶所有物件權限

SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'SCOTT';

2. 查詢特定表誰有 SELECT 權限

SELECT GRANTEE, GRANTOR, GRANTABLE
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'EMP' AND OWNER = 'SCOTT' AND PRIVILEGE = 'SELECT';

3. 檢查當前會話實際擁有權限 (含角色繼承)

SELECT * FROM SESSION_PRIVS;
SELECT * FROM SESSION_ROLES;

4. 角色權限完整鏈路追蹤

-- 角色 -> 系統權限
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'DBA';
-- 角色 -> 物件權限
SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE = 'RESOURCE';
-- 角色 -> 角色
SELECT * FROM ROLE_ROLE_PRIVS WHERE ROLE = 'DBA';

最佳實務建議

  1. 原則使用 **角色** 管理權限,避免直接授予使用者物件權限
  2. 定期審計 `DBA_TAB_PRIVS` / `DBA_SYS_PRIVS`,清理過期/過度授權
  3. 應用程式連線帳號**僅授予必要物件權限**,嚴禁使用 DBA/RESOURCE 等高權限角色
  4. 利用 `SESSION_PRIVS`/`SESSION_ROLES` 於應用啟動時驗證權限完整性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved