Oracle 審計分標準審計(Statement/Privilege/Object)與細粒度審計 FGA(Policy-based,9i+ 引入,10g 大幅增強)。本文涵蓋啟用、配置、查詢、管理全流程。
ALTER SYSTEM SET audit_trail = DB_EXTENDED SCOPE=SPFILE;(值:NONE/DB/DB_EXTENDED/OS)。@$ORACLE_HOME/rdbms/admin/cataudit.sql 建立審計表(SYS.AUD$)。GRANT AUDIT SYSTEM TO user;AUDIT SESSION; AUDIT SELECT, INSERT, UPDATE, DELETE ON scott.emp BY ACCESS WHENEVER NOT SUCCESSFUL;| 類型 | 語法範例 | 說明 |
|---|---|---|
| 陳述式審計 | AUDIT TABLE, CREATE SESSION; | 針對 SQL 陳述式類型 |
| 權限審計 | AUDIT CREATE ANY TABLE; | 針對系統權限使用 |
| 物件審計 | AUDIT SELECT, UPDATE ON scott.emp BY ACCESS; | 針對特定物件操作 |
BY ACCESS:每次操作記錄一筆;BY SESSION:每 Session 記錄一筆(預設)。WHENEVER SUCCESSFUL / NOT SUCCESSFUL:篩選成敗。-- 標準審計視圖
SELECT * FROM DBA_AUDIT_TRAIL;
SELECT * FROM DBA_AUDIT_SESSION;
SELECT * FROM DBA_AUDIT_OBJECT;
ALTER TABLE AUD$ MOVE TABLESPACE audit_ts;
ALTER INDEX I_AUD1 REBUILD ONLINE TABLESPACE audit_ts;
-- 同步移動 FGA_LOG$ 等相關表
audit_condition => 'salary > 10000'。audit_column => 'salary'(僅存取該欄才審計)。BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => 'SCOTT',
object_name => 'EMP',
policy_name => 'EMP_SALARY_AUDIT',
audit_column => 'SAL',
audit_condition => 'SAL > 10000',
enable => TRUE
);
END;
/
SELECT timestamp, db_user, os_user, object_schema, object_name, sql_text
FROM DBA_FGA_AUDIT_TRAIL;
DBMS_FGA.ENABLE_POLICY(..., enable=>FALSE);DBMS_FGA.DROP_POLICY(...);OBJECT_NAME 顯示 Base Table,SQL_TEXT 記錄原始查詢 View 的 SQL。FGA 需 CBO (Cost-Based Optimizer) 且統計資料最新,RBO 模式下會誤觸發審計。
標準審計適合合規「全記錄」,FGA 適合安全「精準記錄」。兩者可並行,但需注意 AUD$/FGA_LOG$ 表空間增長,建立定期歸檔清理作業。