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

Oracle 權限深度解析:WITH ADMIN OPTION 與 WITH GRANT OPTION 的本質差異

     編輯:Oracle 資料庫基礎

核心結論先行

  • WITH ADMIN OPTION:用於系統權限(System Privilege)與角色授予,權限轉授為非級聯(Non-cascading)。
  • WITH GRANT OPTION:用於物件權限(Object Privilege),權限轉授為級聯(Cascading)。

語法與適用範圍

-- 系統權限/角色:使用 ADMIN OPTION
GRANT CREATE SESSION TO emi WITH ADMIN OPTION;
GRANT role1 TO role2 WITH ADMIN OPTION;

-- 物件權限:使用 GRANT OPTION
GRANT SELECT ON customers TO bob WITH GRANT OPTION;
GRANT SELECT ON customers TO hr_manager WITH GRANT OPTION;

行為差異深度剖析

1. WITH ADMIN OPTION(非級聯)

場景:管理員授予 User A CREATE SESSION WITH ADMIN OPTION → A 再授予 B CREATE SESSION → 管理員收回 A 的 CREATE SESSION。

  • 結果:B 仍保有 CREATE SESSION 權限,不受波及。
  • 管理員仍可 直接 REVOKE CREATE SESSION FROM B 精準收回 B 的權限。

本質:A 獲得「授權他人」的能力,但授權鏈結一旦建立,下游權限獨立存在,不隨上游變動而連動。

2. WITH GRANT OPTION(級聯)

場景:管理員授予 User A SELECT ON table WITH GRANT OPTION → A 授予 B SELECT ON table → 管理員收回 A 的 SELECT ON table。

  • 結果:B 的 SELECT ON table 同步失效(級聯收回)。
  • 管理員無法 直接 REVOKE SELECT ON table FROM B(會報錯),因為 B 的權限來源是 A,非直接授予。

本質:權限如樹狀傳播,砍斷根節點(A),枝葉(B)隨之凋零。

實務決策指南

場景建議選項理由
DBA 授權 Junior DBA 管理使用者建立權限WITH ADMIN OPTION需靈活回收下游權限而不影響其他受授者
應用擁有者授權開發者查詢特定業務表WITH GRANT OPTION確保權限隨擁有者收回而自動失效,符合最小權限原則
角色授予角色WITH ADMIN OPTION角色屬系統權限範疇,遵循非級聯邏輯

常見誤區釐清

  • 誤區:「WITH GRANT OPTION 也可用於系統權限。」→ 錯誤,系統權限只接受 ADMIN OPTION。
  • 誤區:「收回 A 的權限,B 總是會受影響。」→ 視選項而定,ADMIN OPTION 不級聯,GRANT OPTION 級聯。
  • 誤區:「管理員總能直接 REVOKE 任何人的權限。」→ GRANT OPTION 鏈結下不可直接 REVOKE 下游,必須先斷開上游授權鏈。

查詢當前權限狀態

-- 系統權限
SELECT * FROM USER_SYS_PRIVS;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USERNAME';

-- 物件權限
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'USERNAME';

-- 角色權限
SELECT * FROM USER_ROLE_PRIVS;
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'ROLENAME';

總結

掌握 ADMIN OPTION(系統/角色、非級聯) 與 GRANT OPTION(物件、級聯) 的本質差異,是構建清晰、可控、安全權限體系的基石。實務中請嚴格遵循「系統權限用 ADMIN,物件權限用 GRANT」原則,並善用 DBA_* 視圖定期稽核權限鏈結,避免權限蔓延與孤島。

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