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

Oracle 細粒度稽核 (FGA) 完整實作指南

     編輯:Oracle 資料庫相關知識

Fine-Grained Auditing (FGA) 可針對特定資料表、特定欄位、特定條件 (如僅稽核薪資欄位變更超過 20% 的 UPDATE) 記錄存取行為,解決傳統稽核「全表、全操作」過於粗糙、產生海量無效日誌的問題。本文以 SCOTT.EMP 為例,示範政策建立、啟用、查詢、刪除全流程。

一、核心套件:DBMS_FGA

二、完整實作腳本

1. 新增政策:稽核 EMP 表的 INSERT/UPDATE/DELETE,任意欄位觸發

BEGIN
  DBMS_FGA.ADD_POLICY (
    object_schema     => 'SCOTT',
    object_name       => 'EMP',
    policy_name       => 'mypolicy1',
    handler_schema    => NULL,          -- 可指定事件處理程序 (PL/SQL 程序)
    handler_module    => NULL,
    enable            => TRUE,
    statement_types   => 'INSERT, UPDATE, DELETE',
    audit_column_opts => DBMS_FGA.ANY_COLUMNS  -- 任一欄位被存取即觸發
  );
END;
/

關鍵參數說明:

  • audit_column_opts:ANY_COLUMNS (任一欄位) / ALL_COLUMNS (所有指定欄位皆被存取) — 10g+ 支援。
  • audit_column:可指定特定欄位清單 (如 'SAL, COMM'),配合 audit_column_opts 實現欄位級稽核。
  • handler_module:可指定 'pkg_audit_handler.proc_log',在稽核觸發時執行自訂邏輯 (如發送告警、寫入自訂表)。

2. 啟用/停用政策

-- 啟用 (ADD_POLICY 已指定 enable=>TRUE 可省略)
BEGIN
  DBMS_FGA.ENABLE_POLICY (
    object_schema => 'SCOTT',
    object_name   => 'EMP',
    policy_name   => 'mypolicy1',
    enable        => TRUE
  );
END;
/

-- 停用
BEGIN
  DBMS_FGA.DISABLE_POLICY (..., enable => FALSE);
END;
/

3. 查詢稽核記錄

-- 核心稽核視圖
SELECT db_user, timestamp, sql_text, sql_bind
FROM dba_fga_audit_trail;

-- 查看視圖定義
SELECT text FROM dba_views WHERE view_name = 'DBA_FGA_AUDIT_TRAIL';

-- 所有政策狀態
SELECT * FROM dba_audit_policies;

4. 刪除政策

BEGIN
  DBMS_FGA.DROP_POLICY (
    object_schema => 'SCOTT',
    object_name   => 'EMP',
    policy_name   => 'mypolicy1'
  );
END;
/

三、進階應用場景

程序功能
ADD_POLICY建立稽核政策
ENABLE_POLICY啟用政策
DISABLE_POLICY停用政策
DROP_POLICY刪除政策
需求實作方式
僅稽核 SAL 欄位變更audit_column => 'SAL', audit_column_opts => DBMS_FGA.ANY_COLUMNS
稽核特定條件 (如 SAL > 5000)audit_condition => 'SAL > 5000' (10g+ 支援)
稽核特定使用者在 handler_module 中判斷 SYS_CONTEXT('USERENV','SESSION_USER')
稽核 SELECT (查詢敏感資料)statement_types => 'SELECT' (11g+ 支援)

四、效能與管理注意事項

  • FGA 記錄寫入 SYS.FGA_LOG$ (底層表),定期清理或分區避免 SYSAUX 表空間暴增。
  • 政策過多會增加解析開銷,僅對敏感表/欄位啟用。
  • 配合 DBMS_FGA.ADD_POLICY 的 handler_module 可實現即時告警、資料遮罩等進階邏輯。
  • 12c+ 建議改用 Unified Auditing (整合標準稽核、FGA、Fine-Grained Auditing、RMAN/DP/Label Security 等),效能更優、管理更簡潔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved