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

Oracle 10g 列值遮罩(Column Masking)實現敏感資料動態脫敏

     編輯:Oracle 資料庫相關知識

技術原理

結合 虛擬私有資料庫(VPD,細粒度存取控制 FGAC) 與 DBMS_RLS.ADD_POLICY 的 SEC_RELEVANT_COLS_OPT => DBMS_RLS.ALL_ROWS 參數,達成「返回所有行,但敏感欄位顯示 NULL」的效果。

實作範例

-- 1. 策略函數:限定部門 60
CREATE OR REPLACE FUNCTION rls_dept (
  obj_owner IN VARCHAR2, obj_name IN VARCHAR2
) RETURN VARCHAR2 AS
BEGIN
  RETURN 'department_id = 60';
END;
/

-- 2. 套用策略: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 應用、BI 工具等所有存取路徑。

關鍵優勢

  • 無需修改應用程式碼,資料庫層面透明脫敏。
  • 細粒度至欄位級,滿足 GDPR、個資法等合規需求。
  • 策略函數可動態判斷用戶身分,實現多層級遮罩。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved