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

Oracle 10g 列值遮罩技術:VPD 進階應用實現敏感資料隱匿

     編輯:Oracle 資料庫相關知識

虛擬私有資料庫 (VPD) 回顧

VPD(細粒度存取控制)對 DML 提供列級安全檢查。策略函數關聯資料表,依用戶上下文動態添加 WHERE 條件。例如:

-- 用戶查詢
SELECT * FROM employees;
-- 實際執行
SELECT * FROM employees WHERE department_id = 60;

僅回傳授權範圍內的行。

10g 新功能:列值遮罩

新選項允許回傳「所有行」,但未授權行的敏感欄位(安全相關欄位)顯示 NULL,其他欄位正常顯示。需在 VPD 策略中做兩件事:

  1. 建立列級策略,指定安全相關欄位
  2. 查詢包含 ALL_ROWS 選項以回傳所有行

實作範例

策略函數(列表 A):

CREATE OR REPLACE FUNCTION rls_dept
  (obj_owner IN VARCHAR2, obj_name IN VARCHAR2) RETURN VARCHAR2 AS
  predicate VARCHAR2(200);
BEGIN
  predicate := 'department_id = 60';
  RETURN predicate;
END rls_dept;

套用策略(列表 B):

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;

參數說明:sec_relevant_cols 指定薪資與傭金為敏感欄位;sec_relevant_cols_opt => ALL_ROWS 啟用列值遮罩。包含這兩欄的查詢才套用策略,否則不受限。適用於 SQL*Plus、.NET 等所有客戶端。

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