首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 稽核功能完整指南:參數設定、三層級稽核、10g 精細稽核 (FGA) 與實戰範例

     編輯:Oracle 資料庫基礎

Oracle 稽核 可記錄使用者資料庫操作,結果寫入 OS 檔案 (預設 $ORACLE_BASE/admin/$SID/adump/) 或資料庫表 SYS.AUD$ (視圖 DBA_AUDIT_TRAIL)。預設關閉,但 SYSDBA 連線、啟動/關閉資料庫 強制記錄。

兩大關鍵靜態參數 (需重啟生效)

參數選項與說明
AUDIT_SYS_OPERATIONSFALSE (預設) / TRUE:啟用後所有 SYS/SYSDBA/SYSOPER 操作記錄至 OS (Windows 事件檢視器、Linux/Unix AUDIT_FILE_DEST),不寫 AUD$。
AUDIT_TRAIL NONE (預設) 關閉
DB:寫 AUD$,僅連線資訊
DB, EXTENDED:含完整 SQL_TEXT/BIND 變數
OS:寫 OS 檔案 (AUDIT_FILE_DEST)
XML:10g 新增,XML 格式 OS 檔案

三層稽核等級

  1. Statement (陳述式): AUDIT TABLE 稽核所有 CREATE/DROP/TRUNCATE TABLE;AUDIT SESSION BY user 稽核特定使用者連線。
  2. Privilege (權限): AUDIT SELECT ANY TABLE,當使用者行使該權限 (如跨 Schema 查詢) 觸發稽核。擁有者存取自己物件不觸發。
  3. Object (物件): AUDIT SELECT, INSERT ON scott.emp BY hr 針對特定物件、特定使用者、特定操作。支援 ON DEFAULT 自動稽核後續新建物件 (但無法限定 Schema)。

進階選項

  • BY ACCESS:每次操作產生一筆記錄。
  • BY SESSION (預設):同一 Session 同類操作僅記錄一次。
  • WHENEVER SUCCESSFUL / WHENEVER NOT SUCCESSFUL:依成敗過濾。

10g 精細稽核 (FGA) 突破

9i FGA 僅支援 SELECT。10g FGA 擴展支援 DML (INSERT/UPDATE/DELETE),可捕獲 行級變更前後值、SCN、完整 SQL 與 BIND 變數,無需自寫 Trigger 或用 LogMiner。範例:

-- Joe 更新 SCOTT.EMP 薪資
UPDATE SCOTT.EMP SET SALARY = 12000 WHERE EMPNO = 123456;

-- 10g FGA 可記錄:誰、何時、什麼表、什麼欄、舊值、新值、完整 SQL
-- 9i 僅能知「誰更新了 EMP」,無法知「哪筆員工、薪資從多少改多少」

實戰範例:啟用、稽核、查詢、清除

1. 啟用稽核

ALTER SYSTEM SET AUDIT_SYS_OPERATIONS=TRUE SCOPE=SPFILE;
ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;
STARTUP FORCE;

2. 物件稽核測試

AUDIT ALL ON t_test;
CONN u_test
SELECT * FROM t_test;
INSERT INTO t_test(c2,c5) VALUES ('test1','2');
DELETE FROM t_test;

CONN / AS SYSDBA
SELECT OS_USERNAME, USERNAME, USERHOST, TERMINAL, TIMESTAMP,
       OWNER, OBJ_NAME, ACTION_NAME, SQL_TEXT
FROM DBA_AUDIT_TRAIL;

3. 常用稽核語句速查

AUDIT SESSION;                          -- 所有連線
AUDIT SESSION BY jeff, lori;              -- 指定用戶
AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT SELECT, INSERT, DELETE ON jward.dept BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT TABLE BY appserv ON BEHALF OF jackson; -- 多層環境代理稽核

NOAUDIT SESSION;
NOAUDIT DELETE ANY TABLE;
NOAUDIT ALL;              -- 取消所有陳述式稽核
NOAUDIT ALL PRIVILEGES;   -- 取消所有權限稽核
NOAUDIT ALL ON DEFAULT;   -- 取消所有物件預設稽核

4. 清除稽核記錄

DELETE FROM SYS.AUD$;
DELETE FROM SYS.AUD$ WHERE OBJ$NAME = 'EMP';

5. 移動 AUD$ 表空間 (含 LOB 欄位)

ALTER TABLE SYS.AUD$ MOVE TABLESPACE USERS;
ALTER TABLE SYS.AUD$ MOVE LOB (SQLBIND) STORE AS (TABLESPACE USERS);
ALTER TABLE SYS.AUD$ MOVE LOB (SQLTEXT) STORE AS (TABLESPACE USERS);
ALTER INDEX SYS.I_AUD1 REBUILD TABLESPACE USERS;

相關稽核視圖

  • DBA_STMT_AUDIT_OPTS、DBA_PRIV_AUDIT_OPTS、DBA_OBJ_AUDIT_OPTS:目前啟用的稽核選項。
  • DBA_AUDIT_TRAIL、DBA_AUDIT_SESSION、DBA_AUDIT_OBJECT、DBA_AUDIT_STATEMENT:稽核記錄查詢。
  • ALL_DEF_AUDIT_OPTS:ON DEFAULT 設定。
  • DBA_COMMON_AUDIT_TRAIL:12c+ 統一標準稽核 + FGA 記錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved