以前のOracle Databaseの監査機能について記事が古くなってきたので、改めて記述し直そうと思います。
Oracle Databaseの監査機能は、従来からの監査機能(DBA監査、標準監査)と12cから使用できるUnified Auditの2種類に大きく分けることができます。
12cから使用可能なUnified Auditは、従来の監査の問題点を解決するために新しいアーキテクチャで開発した監査機能として提供しており、基本的にUnified Auditの使用が推奨されています。とはいえ、OSファイルやXML形式による監査ログの運用を好むデータベースも多々あるかと思います。
両方の監査機能は変わらず併用することができましたが、23cからは正式に 非サポートとなりますので、改めてUnified Auditの特徴や使い方に改めてご紹介します。
Unified Auditの特徴
Unified Auditの大きな特徴としては、
- 監査レコードは、DB表(AUDSYS.AUD$UNIFIED)に格納される (※18cからはsyslog出力が可能)
- 書き込み不可の場合は、$ORACLE_BASE/audit/ORACLE_SIDにファイルとして出力
- DBA監査、Recovery Manager, Data Pump, SQL*Loaderなどのユーティリティ系のログも統合
- 監査が起動する条件を細かく指定できる
- Unified_Audit_Trailビューでログ・レコードを参照する
条件による監査対象の絞り込み
Unified Auditの監査ポリシーには、データベースやユーザーのすべてのアクションを対象にするActions Allという定義が作成できますが、ログ・レコードが膨大になるため安易な使用は控えたほうが無難です。
また、Unified Auditは、ログレコードをDB内に格納するという性質上、監査対象を絞り込むことは、監査ログのストレージ領域の削減とデータベースへのパフォーマンスへの影響を最小化する大きなメリットがあります。監査ポリシーの作成方法については、こちらを確認して下さい。
下記は、いくつか条件指定の例を紹介します。
- 特定のユーザーのUPDATEとDELETE文のDMLを監査
CREATE AUDIT POLICY audPolicy1
ACTIONS UPDATE ON SecretTbl, DELETE ON SecretTbl
EVALUATE PER STATEMENT;
AUDIT POLICY audPolicy1 BY UserX, UserY;
# ユーザー指定しない場合は、全ユーザーが対象
AUDIT POLICY audPolicyl;
# EXCEPTを指定すると指定ユーザー以外が対象
AUDIT POLICY audPolicy1 EXCEPT UserX, UserY;
- WHEN句で、IPアドレスがNULL(ローカル接続)の場合のみの条件を追加
CREATE AUDIT POLICY audPolicy2
ACTIONS UPDATE ON SecretTbl, DELETE ON SecretTbl
WHEN 'SYS_CONTEXT(''USERENV'',''IP_ADDRESS'') IS NULL'
EVALUATE PER STATEMENT;
AUDIT POLICY audPolicy2;
- Actions ALLだけれども、JDBC接続のAPサーバのアクセスを除く条件を指定
CREATE AUDIT POLICY audPolicy3
ACTIONS ALL on SecretTbl
WHEN 'SYS_CONTEXT(''USERENV'',''HOST'') IN ''dbsec01.jp.oracle.com,dbsec02.jp.oracle.com'' and SYS_CONTEXT(''USERENV'',''MODULE'') NOT IN ''JDBC Thin Client'''
EVALUATE PER STATEMENT;
AUDIT POLICY audPolicy3;
- DATAPUMPのエクスポートを監査
CREATE AUDIT POLICY audPolicy3 ACTIONS COMPONENT=DATAPUMP EXPORT;
AUDIT POLICY audPolicy3 BY SYSTEM;
Mixed Mode (混合モード)
- Mixed Modeは、従来の監査機能とUnified Auditの両方が使用可能
- 12c以降、Mixed Modeがデフォルト設定になっている ※Autonomous DBはUnified Auditのみ
- DBCAでDBを作成した場合、または、Oracle Cloud Database ServicesのDBは ORA_LOGON_FAILURESとORA_SECURECONFIGの事前定義ポリシーがデフォルト有効化される。
- Mixed Modeの場合は、以下の制限事項に注意
- SYS,SYSASM等の監査ログファイルは、audit_file_destパラメータで指定されたディレクトリにOSファイルとして出力される
- RMANやDatapump等のユーティリティのログはUnified Auditに出力されない
- Mixed ModeからPure Unified Auditに完全移行すると、上記のログはUnfired Auditへ集約される
Unified Auditの確認方法
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
-------------------------------------------
TRUE --> Unified Auditing
FALSE --> Mixed Mode
Mixed ModeからPure Unified Auditの移行手順
Pure Unified Auditの完全移行は必須ではない
従来の監査機能は廃止して、完全にUnified Auditだけを使用したい場合は以下で移行する
データベースのシャットダウン、リスナーの停止
$ORACLE_HOME/rdbms/libに移動
(Unix) make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
(Windows) %ORACLE_HOME%/rdbms/bin/orauniaud12.dll.optionファイルをorauniaud12.dllにリネーム
リスナー、データベースの起動
Unified Auditの削除
- すべてのUnified Auditを無条件ですべて削除する
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => FALSE);
- 指定した日時以前のUnified Auditを削除する
最終日付を指定するプロシージャ
EXEC
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
last_archive_time => TO_TIMESTAMP('2020-01-01:00:00.00','YYYY-MM-HH24:MI:SS.FF'));
END;
/
EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL (audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => False);
Unified Auditのデフォルト表領域の変更
監査ログによるSYSAUXの肥大化を避けたい場合は別の表領域に予め移動しておく
表領域の作成
CREATE BIGFILE TABLESPACE AUDIT DATAFILE SIZE 500G AUTOEXTEND ON NEXT 100G MAXSIZE 1000G;
表領域の移動
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION (
audit_trail_type => DBMS_AUDIT_MGMT. AUDIT_TRAIL_UNIFIED,
audit_trail_location_value => ‘AUDIT’);
END;
Unified Auditとログサービスとの連携
Unified Auditには、SQLでUnified Audit Trailビューから監査レコードにアクセスすることができますが、見やすくビジュアライスしてレポートしたり、細かくログ分析する場合には、ログ製品やBIツールと連携するのが実用的です。
従来では、Audit Vault and Database FirewallというDB監査のオンプレミス製品がありますが、クラウドには、Data SafeまたはLogging Analyticsというサービスがあります。これらのサービスにログを取り込ませた後は、DB側のUnified Auditのログレコードを削除して軽くするすることができるので、監査ログの長期保存には、必要なストレージを柔軟に追加できるクラウドのストレージと相性が良いかと思います。
OCI DataSafeでBaseDB/ExaDB-Dの監査ログを取り込んで分析する
OCI Logging AnalyticsでOracle Databaseの関連ログを取り込んで分析する
OCI Logging AnalyticsでDatabaseの監査表やユーザー表を分析する