【Oracle】監査ログの保存先とローテーションの設定方法

【Oracle】監査ログの保存先とローテーションの設定方法 Oracle

Oracle Databaseでは、ユーザーの操作履歴やシステムイベントを記録する監査(Audit)ログを有効にすることで、セキュリティ強化やトラブルシューティングに役立てることができます。

本記事では、監査ログの保存先を確認・変更する方法と、ログの肥大化を防ぐローテーション設定について解説します。

監査ログの保存先の確認方法

Oracleの監査ログには大きく分けて2種類あり、それぞれ保存先が異なります。

1. OS監査ログ(Audit File)

初期化パラメータAUDIT_FILE_DESTで保存先が決まります。

SHOW PARAMETER audit_file_dest

この出力結果に表示されるディレクトリが、OS上のログ出力先です。

2. DB監査ログ(DBAUD)

監査データがSYS.AUD$などのデータディクショナリ表に格納されます。

SELECT * FROM dba_audit_trail;

DB監査を使用するか、OS監査を使用するかはAUDIT_TRAILパラメータによって決まります。

SHOW PARAMETER audit_trail
  • DB → データベースに保存
  • OS → OSファイルに保存
  • XML → XML形式でOSに保存

監査ログのローテーション設定(OS監査ログ)

OS監査ログは肥大化しやすいため、cronやlogrotateを用いて定期的にバックアップ・削除するのが一般的です。

logrotateの設定例(Linux)

/etc/logrotate.d/oracle_audit というファイルを作成し、以下を記述します:

/u01/app/oracle/admin/ORCL/adump/*.aud {
  daily
  missingok
  rotate 7
  compress
  notifempty
  create 640 oracle dba
}

この設定では、監査ログを毎日ローテーションし、最大7世代をgzip圧縮付きで保存します。

監査ログのローテーション設定(DB監査ログ)

DB監査ログを削除するには、AUD$テーブルから直接削除します。ただし、DBのパフォーマンスに影響するため、スケジュールジョブなどで制御することが推奨されます。

DB監査ログの削除SQL例

DELETE FROM sys.aud$ WHERE ntimestamp# < SYSDATE - 30;
COMMIT;

上記は、30日以上前の監査ログを削除する例です。必要に応じてバックアップ後に削除します。

補足:Unified Audit(統合監査)のログ確認

Oracle 12c以降ではUnified Auditが導入されており、UNIFIED_AUDIT_TRAILビューでログを確認できます。

SELECT event_timestamp, username, action_name
FROM unified_audit_trail
WHERE event_timestamp > SYSDATE - 1;

Unified Auditはaud$とは独立して動作し、ログローテーションの方針も異なるため別途管理が必要です。

まとめ

Oracleの監査ログはシステムの安全性を保つうえで不可欠ですが、適切な保存先の設定とローテーション運用が不可欠です。

OS監査ログはlogrotateなどの仕組みで自動管理し、DB監査ログは定期的な削除ジョブを設定しましょう。環境や要件に応じて、Unified Auditの利用も検討するとよいでしょう。