監査証跡
Oracle Database には監査証跡を取得する機能があります。標準として使われる機能は「統合監査(Unified Auditing)」です。統合監査では監査証跡をAUDSYS ユーザーのAUD$UNIFIED テーブルに保存されます。このテーブルに保存される監査証跡は標準では自動削除されないため、不要になったら削除が必要になります。しかし、このテーブルに対する DELETE 文や TRUNCATE 文は管理者(SYS ユーザー、SYSTEM ユーザー)であっても許可されていません。
SQL> CONNECT / AS SYSDBA
接続されました。
SQL> TRUNCATE TABLE AUDSYS.AUD$UNIFIED;
TRUNCATE TABLE AUDSYS.AUD$UNIFIED
*
行1でエラーが発生しました。:
ORA-46385: 表"AUDSYS"."AUD$UNIFIED"ではDMLおよびDDL操作は許可されていません。
監査証跡の削除方法
監査証跡の管理は DBA_AUDIT_MGMT パッケージを使います。このパッケージは AUDIT_ADMIN ロールを保有するユーザーで実行する必要があります。監査証跡の手動削除は CLEAN_AUDIT_TRAIL プロシージャを実行します。すべての監査証跡を削除するか、不要になった監査証跡のタイムスタンプを指定するかを決めます。不要になった監査証跡のタイムスタンプを指定するには SET_LAST_ARCHIVE_TIMESTAMP プロシージャを実行します。
SQL> BEGIN
2 DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
3 AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 LAST_ARCHIVE_TIME => SYSTIMESTAMP -1,
5 RAC_INSTANCE_NUMBER => 1,
6 CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
上記の例では現在時刻から LAST_ARCHIVE_TIME パラメーターを使って 1日より前の監査証跡を不要と判断しています。監査証跡の削除には CLEAN_AUDIT_TRAIL プロシージャを使います。USE_LAST_ARCH_TIMESTAMP に TRUE を指定すると、不要となった監査証跡のみを削除します。このパラメーターに FALSE を指定すると全監査証跡が削除されます。
SQL> BEGIN
2 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
3 AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 USE_LAST_ARCH_TIMESTAMP => TRUE,
5 CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
監査証跡の自動削除方法
DBMS_AUDIT_MGMT パッケージの CREATE_PURGE_JOB プロシージャを使うと、監査証跡を定期的に削除するジョブを作成できます。
SQL> BEGIN
2 DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
3 AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 AUDIT_TRAIL_PURGE_INTERVAL => 12,
5 AUDIT_TRAIL_PURGE_NAME => 'PurgeAuditJob1',
6 USE_LAST_ARCH_TIMESTAMP => FALSE,
7 CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);
8 END;
9 /
PL/SQLプロシージャが正常に完了しました。
上記の例はカレントのコンテナで、すべての統合監査データを12時間間隔で削除するジョブを作成しています。
パラメーター名 | 説明 | 備考 |
---|---|---|
AUDIT_TRAIL_TYPE | 削除する監査証跡のタイプ、AUDIT_TRAIL_UNIFIED は統合監査 | |
AUDIT_TRAIL_PURGE_INTERVAL | ジョブの実行間隔(時間単位) | |
AUDIT_TRAIL_PURGE_NAME | 任意のジョブ名 | |
USE_LAST_TIMESTAMP | 削除対象のタイムスタンプを使う場合はTRUE、全監査データを削除する場合はFALSE | |
CONTAINER | ジョブ実行コンテナ |
AUDIT_TRAIL_TYPE に AUDIT_TRAIL_OS を指定しても、SYSLOG (Linux / UNIX) やイベントログ(Windows)に出力された監査証跡は削除されません。
CREATE_PURGE_JOB プロシージャを実行すると、以下のようなスケジューラー・ジョブが作成されます。
SQL> SELECT owner, job_name, job_style, program_name, job_type, job_action, job_priority,start_date,repeat_interval from dba_scheduler_jobs where job_name='PURGEAUDITJOB1';
OWNER JOB_NAME JOB_STYLE PROGRAM_NA JOB_TYPE JOB_ACTION JOB_PRIORITY
---------- -------------------- ----------------- ---------- ---------------- ---------------------------------------- ------------
START_DATE REPEAT_INTERVAL
---------------------------------------- --------------------
AUDSYS PURGEAUDITJOB1 REGULAR PLSQL_BLOCK BEGIN AUDSYS.DBMS_AUDIT_MGMT.CLEAN_AUDIT 3
_TRAIL(51, FALSE, 1); END;
24-02-05 15:05:54.365023 ASIA/TOKYO FREQ=HOURLY;INTERVAL
=12
列名 | 値 | 備考 |
---|---|---|
OWNER | AUDSYS | 固定値 |
JOB_NAME | PURGEAUDITJOB1 | AUDIT_TRAIL_PURGE_NAME 設定値 |
JOB_STYLE | REGULAR | 固定値 |
JOB_TYPE | PLSQL_BLOCK | 固定値 |
JOB_ACTION | BEGIN AUDSYS.DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(51, FALSE, 1); END; | |
JOB_PRIORITY | 3 | 固定値 |
START_DATE | {初回実行時刻} | 計算値 |
REPEAT_INTERVAL | FREQ=HOURLY;INTERVAL=12 | AUDIT_TRAIL_PURGE_INTERVAL指定値 |
上記のように定期的に DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL プロシージャを実行するスケジューラ・ジョブが作成されることがわかります。
監査証跡削除ジョブを参照する専用のビューも提供されています。
SQL> SELECT * FROM DBA_AUDIT_MGMT_CLEANUP_JOBS;
JOB_NAME JOB_STAT AUDIT_TRAIL JOB_FREQUENCY USE JOB_CON
-------------------- -------- ---------------------------- ------------------------- --- -------
PURGEAUDITJOB1 ENABLED UNIFIED AUDIT TRAIL FREQ=HOURLY;INTERVAL=24 NO CURRENT
実行間隔の変更
削除間隔を変更する場合には DMBS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL プロシージャを実行します。以下の例では作成した PurgeAuditJob1 ジョブの実行間隔を 24 時間に変更しています。DBA_SCHEDULER_JOBS ビューの REPEAT_INTERVAL 列が変更されていることがわかります。
SQL> BEGIN
2 DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(
3 AUDIT_TRAIL_PURGE_NAME => 'PurgeAuditJob1',
4 AUDIT_TRAIL_INTERVAL_VALUE => 24 );
5 END;
6 /
PL/SQLプロシージャが正常に完了しました。
SQL> SELECT REPEAT_INTERVAL FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME='PURGEAUDITJOB1';
REPEAT_INTERVAL
--------------------------------------------------------------------------------
FREQ=HOURLY;INTERVAL=24
Author: Noriyoshi Shinoda / Date: February 5, 2024