首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 10g 虛擬私有資料庫 (VPD) 進階:五種策略類型與列遮罩實戰

     編輯:Oracle 資料庫相關知識

VPD 核心機制

透過策略函數動態為查詢附加謂詞,將 SELECT * FROM accounts; 重寫為 SELECT * FROM accounts WHERE am_name = 'SCOTT';,實現行級安全。

10g 新增五大策略類型(效能由低到高)

類型特徵適用場景
DYNAMIC(預設)每次存取、每行重新執行函數謂詞高度動態、依賴即時 Session 狀態
CONTEXT_SENSITIVE應用程式上下文未變則不重新執行謂詞含 SYS_CONTEXT,上下文相對穩定
SHARED_CONTEXT_SENSITIVE跨 Session 共享相同上下文結果Web 應用連線池,多用戶共用 DB User
STATIC謂詞完全固定,僅編譯一次謂詞僅依賴固定 USER_ID、角色
SHARED_STATIC跨 Session 共享靜態謂詞大量 Session 共用相同靜態策略

列遮罩 (Column Masking) 實作

-- 策略函數
CREATE OR REPLACE FUNCTION rls_dept (...) RETURN VARCHAR2 AS
BEGIN RETURN 'department_id = 60'; END;

-- 套用策略:salary、commission_pct 為敏感欄位,啟用 ALL_ROWS
BEGIN
  DBMS_RLS.ADD_POLICY(
    object_schema      => 'HR',
    object_name        => 'EMPLOYEES',
    policy_name        => 'restrict_dept_policy',
    function_schema    => 'HR',
    policy_function    => 'rls_dept',
    sec_relevant_cols  => 'salary,commission_pct',
    sec_relevant_cols_opt => DBMS_RLS.ALL_ROWS
  );
END;
/

效果:SELECT * FROM employees 返回所有行,但 salary、commission_pct 顯示 NULL,其餘欄位正常。

關鍵優勢

  • 無需修改應用,資料庫層透明實現行級與列級安全。
  • 策略類型靈活選擇,平衡安全性與查詢效能。
  • 支援 SQL*Plus、.NET、Java、BI 工具等所有存取路徑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved