0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

統合監査証跡の定期削除ジョブを試す(Oracle Database 19c)

Last updated at Posted at 2024-02-05

監査証跡

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?