【Oracle】監査(AUDIT)機能の設定方法|誰が何をしたか記録する

【Oracle】監査(AUDIT)機能の設定方法|誰が何をしたか記録する Oracle

Oracleデータベースでは、誰が・いつ・何を実行したかを記録する監査(AUDIT)機能が用意されています。セキュリティ対策や不正アクセスの検出、法的な監査対応として不可欠な機能です。

この記事では、Oracleの監査機能の基本的な使い方から、代表的な監査設定、ログの確認方法までをわかりやすく解説します。

1. Oracleの監査(AUDIT)機能とは?

AUDIT機能は、特定の操作(例:ログイン、テーブルへのアクセス、データ変更など)を実行したユーザーやタイミングをログとして記録する仕組みです。

監査には次のような種類があります。

  • 標準監査(Standard Auditing):バージョン12cまでの主流機能
  • 統合監査(Unified Auditing):12c以降の新機能(デフォルト無効)

本記事では主に標準監査の設定手順を紹介します。

2. AUDIT機能の有効化方法

初期化パラメータの設定

まず、監査ログの出力先を指定する初期化パラメータを確認します。

SHOW PARAMETER audit_trail;

出力形式を変更するには、audit_trailパラメータを以下のいずれかに設定し、インスタンスを再起動します。

  • NONE:監査無効
  • DB:監査ログをDBのSYS.AUD$に保存
  • DB,EXTENDED:SQL文などの詳細も保存
  • OS:監査ログをOSファイルに出力
ALTER SYSTEM SET audit_trail='DB,EXTENDED' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

3. 特定操作の監査設定

例1:すべてのログイン・ログアウト操作を監査

AUDIT SESSION;

例2:すべてのテーブルのSELECTを監査

AUDIT SELECT TABLE;

例3:特定ユーザーが特定テーブルに対して行うDML操作を監査

AUDIT INSERT, UPDATE, DELETE ON SCOTT.EMP BY ACCESS;

このように柔軟に条件を指定して監査対象を定義できます。

4. 監査ログの確認方法

監査ログは、監査方法によって格納場所が異なります。

DBへ記録している場合(audit_trail=DB)

SELECT
  username,
  action_name,
  obj_name,
  returncode,
  timestamp
FROM dba_audit_trail
ORDER BY timestamp DESC;

RETURNCODE = 0 なら正常に実行された操作を示します。ログイン/ログアウトなども記録されます。

OSログに記録している場合(audit_trail=OS)

監査ログは、通常以下のようなパスにテキストファイルとして保存されます。

$ORACLE_BASE/admin/<SID>/adump/

出力形式はバージョンやOSによって異なりますが、ログイン情報やSQL文の断片が確認可能です。

5. 監査設定の確認と削除

設定の確認

SELECT * FROM dba_stmt_audit_opts;

監査設定の削除

NOAUDIT INSERT, UPDATE, DELETE ON SCOTT.EMP;

すべての監査を無効にしたい場合は NOAUDIT ALL; を実行します。

6. 監査ログの削除と注意点

監査ログは定期的に削除しないと表領域を圧迫することがあります。特にDB設定でSYS.AUD$テーブルに蓄積される場合は注意が必要です。

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

上記は30日以前の監査ログを削除する例です。業務ポリシーに従って適切に管理しましょう。

まとめ

Oracleの監査(AUDIT)機能は、ユーザーの操作を追跡し、不正や誤操作の証拠を残すために非常に有効です。セキュリティレベルを向上させるため、以下のポイントを押さえて導入しましょう。

  • 監査の有効化: audit_trailを正しく設定
  • 目的に応じた監査設定: SELECT/DML/ログインなど
  • ログの定期確認と不要データの削除

監査は「備えあれば憂いなし」の重要機能です。適切に設定し、ログを活用して堅牢な運用体制を整えましょう。