【PL/SQL】ファイングレイン監査(FGA)とPL/SQLの活用

【PL/SQL】ファイングレイン監査(FGA)とPL/SQLの活用 PL/SQL

ファイングレイン監査(FGA: Fine Grained Auditing)は、Oracleが提供する高度な監査機能で、特定の条件に合致したデータアクセスだけを記録できます。従来の監査が「誰がどの表にアクセスしたか」といった大まかな単位だったのに対し、FGAでは「特定の列に対するアクセス」「WHERE句に合致したデータの取得」など細かい条件で制御できるのが特徴です。ここではFGAの基本概念と、PL/SQLを用いた設定・運用方法を解説します。

FGAの特徴と利用シーン

FGAはDBMS_FGAパッケージを使って設定します。次のようなケースで利用が有効です。
– 個人情報や給与データのアクセスを監査したい
– 特定条件(例: 高額な取引データ)へのアクセスだけ記録したい
– SELECTだけでなくUPDATEやDELETEも含めた監査をしたい

従来の監査よりもログが絞られるため、実務に直結する証跡を効率的に残せます。

監査ポリシーの作成

DBMS_FGA.ADD_POLICYを使ってポリシーを定義します。例として、employees表のsalary列を監査対象にします。

BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema   => 'HR',
    object_name     => 'EMPLOYEES',
    policy_name     => 'FGA_EMP_SAL',
    audit_condition => 'salary >= 10000',
    audit_column    => 'SALARY',
    handler_module  => NULL,
    enable          => TRUE
  );
END;
/

この設定では、HR.EMPLOYEES表に対するクエリで、salary列を参照し、かつ給与が10000以上の行にアクセスした場合のみ監査ログが記録されます。

監査ログの確認

FGAの結果はデフォルトでDBA_FGA_AUDIT_TRAILに格納されます。以下のように検索できます。

SELECT db_user, os_user, timestamp, sql_text
  FROM dba_fga_audit_trail
 WHERE policy_name = 'FGA_EMP_SAL'
 ORDER BY timestamp DESC;

ここにはSQL文やユーザー名、実行時刻などが記録されるため、後追い調査が可能です。

PL/SQLハンドラとの連携

FGAでは特定のアクセスが発生したときにPL/SQLプロシージャを呼び出すことができます。これにより、リアルタイムでアラートを飛ばしたり、補助的なログテーブルへ書き込む運用が可能です。

CREATE OR REPLACE PROCEDURE fga_alert_handler(
  object_schema VARCHAR2,
  object_name   VARCHAR2,
  policy_name   VARCHAR2
) IS
BEGIN
  INSERT INTO fga_alert_log(object_schema, object_name, policy_name, log_time)
  VALUES (object_schema, object_name, policy_name, SYSTIMESTAMP);

  -- 必要に応じてメール通知やアラート送信処理を追加
END;
/

このプロシージャをhandler_moduleとして登録すれば、監査イベントの発生時に自動で実行されます。

ポリシーの管理と削除

ポリシーは無制限に積み重ねられるため、不要になったら削除します。

BEGIN
  DBMS_FGA.DROP_POLICY(
    object_schema => 'HR',
    object_name   => 'EMPLOYEES',
    policy_name   => 'FGA_EMP_SAL'
  );
END;
/

また、ENABLE_POLICYやDISABLE_POLICYで一時的に有効・無効を切り替えることもできます。

注意点とベストプラクティス

FGAは高機能ですが、監査の条件を細かくしすぎるとログ量が増えすぎたり、SQLの実行に若干のオーバーヘッドがかかります。実務では以下の点に留意します。
– 必要な列や条件に絞る(全件監査は避ける)
– 監査ログの定期的なアーカイブ・削除を行う
– PL/SQLハンドラは軽量に設計する(重い処理は非同期に回す)

まとめ

ファイングレイン監査は、アクセス条件を細かく制御できるOracleの強力な監査機能です。DBMS_FGAを用いて条件や列単位でログを記録し、さらにPL/SQLハンドラで通知やログ拡張を組み合わせれば、セキュリティ監視の即応性が高まります。運用ではログ量と性能のバランスを考慮し、必要最小限のポリシーを設計することが成功の鍵となります。