Oracle AUDIT 是原生安全稽核功能,支援陳述式、權限、物件三層級稽核。本文系統說明核心參數、三大稽核層級、BY ACCESS/SESSION 差異、成功/失敗過濾、稽核視圖查詢與停用管理,助你在 30 分鐘內建立可用的稽核基線。
| 參數 | 預設值 | 建議值 | 說明 |
|---|---|---|---|
| AUDIT_TRAIL | NONE | DB / DB,EXTENDED / XML | DB=寫入 SYS.AUD$;EXTENDED 含 SQL_BIND/TEXT;XML=寫作業系統 XML 檔 |
| AUDIT_SYS_OPERATIONS | FALSE | TRUE | 強制稽核 SYS/SYSDBA/SYSOPER 所有操作,寫 OS 稽核檔 (不受資料庫狀態影響) |
| AUDIT_FILE_DEST | $ORACLE_HOME/rdbms/audit | 獨立磁碟目錄 | OS 稽核檔儲存路徑 |
| 層級 | 語法範例 | 稽核範圍 | 典型用途 |
|---|---|---|---|
| Statement (陳述式) | AUDIT TABLE;AUDIT SESSION BY scott; | 指定 SQL 陳述式類型 (CREATE/DROP/ALTER TABLE 等) 或特定用戶會話 | DDL 變更追蹤、登入監控 |
| Privilege (系統權限) | AUDIT SELECT ANY TABLE; | 使用特定系統權限的操作 (如跨 Schema 查詢) | 高權限操作監控 |
| Object (物件) | AUDIT SELECT, INSERT ON scott.emp BY ACCESS;AUDIT DROP ON DEFAULT BY ACCESS; | 特定物件的操作;DEFAULT 子句自動套用至後建立物件 | 敏感表存取稽核、新物件自動納管 |
BY ACCESS-- 1. 啟用稽核 (範例)
AUDIT SESSION WHENEVER SUCCESSFUL;
AUDIT CREATE TABLE, DROP TABLE BY ACCESS;
AUDIT SELECT, INSERT, UPDATE, DELETE ON scott.emp BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT SELECT ANY TABLE BY ACCESS;
-- 2. 查看稽核記錄
SELECT username, obj_name, action_name, returncode, timestamp
FROM dba_audit_trail
WHERE timestamp > SYSDATE - 1
ORDER BY timestamp DESC;
-- 3. 查看已配置稽核策略
SELECT * FROM dba_stmt_audit_opts; -- 陳述式層級
SELECT * FROM dba_priv_audit_opts; -- 權限層級
SELECT * FROM dba_obj_audit_opts; -- 物件層級
SELECT * FROM all_def_audit_opts; -- DEFAULT 子句配置
-- 4. 停用稽核 (對應語法改 NOAUDIT)
NOAUDIT SESSION WHENEVER SUCCESSFUL;
NOAUDIT CREATE TABLE, DROP TABLE;
NOAUDIT SELECT, INSERT ON scott.emp;
NOAUDIT ALL ON DEFAULT; -- 移除 DEFAULT 自動稽核
DBA_AUDIT_TRAIL:核心視圖,基於 SYS.AUD$DBA_AUDIT_SESSION:登入/登出記錄DBA_AUDIT_OBJECT:物件操作記錄DBA_AUDIT_STATEMENT:陳述式執行記錄DBA_COMMON_AUDIT_TRAIL (12c+):統一標準/精細稽核視圖DBMS_AUDIT_MGMT (11gR2+) 自動分區/清除舊記錄,避免 SYSAUX 表空間爆滿AUDIT ALL 全開,依風險等級分級稽核AUDIT_TRAIL=XML 同時寫 OS 檔案,資料庫掛掉仍有記錄AUDIT_SYS_OPERATIONS=FALSE 可繞過稽核建立分級分類的稽核基線,是資料庫安全合規的基石動作。