GRANT SELECT ON t TO u)隨業務增長呈指數爆炸,維護極難。設計原則:所有數據訪問代碼封裝於 **PL/SQL 存儲過程/函數/包** 中,最終用戶**僅授予 EXECUTE 權限**,**零對象權限**。
對比 Invoker's Rights(調用者權限):調用者需自有底層權限,等同傳統模式,複雜度高、不推薦。
USER_SOURCE、USER_PROCEDURES),易查找、版本化、熱修復(CREATE OR REPLACE)。DBMS_SHARED_POOL.KEEP 將熱點包鎖定 Library Cache,消除硬解析,微秒級響應。MEMBER METHOD 綁定對象類型,結構變更單點維護。PKG_API.DO_BUSINESS),遷移目標庫零改前端代碼。WHERE tenant_id = SYS_CONTEXT('CTX','TENANT')SELECT id, name FROM t 隱藏敏感列)IF order_status='PAID' THEN ...)SYS_CONTEXT('USERENV','IP_ADDRESS') 綁定白名單| 局限 | 影響 | 應對策略 |
|---|---|---|
| 前期設計成本高 | 需預先識別所有業務接口、參數、異常流 | 領域驅動設計(DDD)劃分限界上下文,接口契約先行 |
| 過程語言鎖定(PL/SQL/Java) | 團隊技能棧受限 | 核心邏輯 PL/SQL,邊緣擴展 Java/Python 外部過程(EXTPROC) |
| 審計複雜 | 傳統對象-用戶矩陣失效 | 建立「接口-用戶」矩陣 + 統一審計 AUDIT EXECUTE PROCEDURE BY ACCESS + 解析 USER_SOURCE 關聯底層表 |
DBA_TAB_PRIVS,識別高風險直接授權對象。PKG_HR, PKG_FIN),將所有 DML/查詢封裝為 FUNCTION/PROCEDURE。REVOKE ALL ON t FROM PUBLICGRANT EXECUTE ON pkg_hr TO app_roleGRANT app_role TO end_usersDBA_TAB_PRIVS 僅剩系統必要授權。AUDIT EXECUTE PROCEDURE,建立基線。Grant Execute 模式以 **Definer's Rights** 為基石,將「數據訪問」轉化為「服務調用」,實現**零後門、可審計、高性能、可遷移**的安全架構。雖然前期投入大,但對核心業務系統屬於**一次性投入、長期受益**的高 ROI 選擇。