連載
» 2013年12月24日 19時25分 公開

従来の監査から飛躍的に改善され使いやすくなったUnified Auditユーザー目線でチェック! Oracle Database 12cの知りたいところ(4)(2/4 ページ)

[菅原 良也,株式会社コーソル]

Unified Auditing機能を使用するための準備

 Unified Auditingには、「Mixed Mode」と「Unified Auditing」と呼ばれる2つの動作モードがあります。「Mixed Mode」動作モードは従来の監査と互換性を持たせた以下のような動作となるため、監査機能は実質的には統合されていません。

  • SYSDBAのログファイルは従来通りOSのディレクトリ上に出力
  • RMANやDatapumpなどのユーティリティのログは、Unified Auditingに統合されない

 Oracle Database 12cのデフォルトの状態では、Unified Auditingの動作モードはMixed Modeになっています。Unified Auditingを完全な動作で使用するため、まずはMixed ModeからUnified Auditingへ動作モードを変更します。その後、監査を行うポリシーを有効に設定し、監査ログを取得します。

監査モードの確認とUnified Auditingモードへの変更

 現在の監査モードは、SQL*Plusから次のSELECT文を実行することで確認できます。取得されたVALUEの値がFALSEの場合がMixed Modeで、TRUEの場合がUnified Auditingモードになります。

SELECT文にて監査モードを確認した例

SQL> COL value FORMAT a10
SQL> SELECT value FROM v$option WHERE parameter='Unified Auditing';
VALUE
----------
FALSE <== FALSEの場合はMixed Mode、TRUEの場合はUnified Auditing

 Unified Auditingモードへの変更は、次の手順で行います。

(1)データベースインスタンスおよびリスナーを停止
(2)$ORACLE_HOME/rdbms/lib ディレクトリに移動
(3)以下コマンドをOracle インストールユーザーで実行しrelinkを実施

make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME

(4)リスナー、データベースインスタンスを起動

監査ポリシーの作成、有効化

 CREATE AUDIT POLICY文で監査ポリシーを作成します。ポリシーを利用することで、煩雑な監査設定を行わなくとも監査を実行できます。例えばデータベース内の全ての操作を監査対象とするポリシーであれば、以下CREATE AUDIT POLICY文で簡単に作成できます。ポリシー作成後、AUDIT POLICY文で有効化します。

監査ポリシーの作成と有効化の実行例

SQL> CREATE AUDIT POLICY all_test ACTIONS ALL;
監査ポリシーが作成されました。
SQL> AUDIT POLICY all_test;
監査が成功しました。
SQL>

 なお、監査のポリシーの無効化はNOAUDIT POLICY、監査ポリシーの削除はDROP AUDIT POLICY文で行います。

Unified Auditingの監査ログの記録

 Unified Auditingでは、必須監査・DBA監査・標準監査が統合され、いずれに該当するログもUNIFIED_AUDIT_TRAILビューで参照できるようになりました。従来の監査機能が監査対象とするアクションごとに、Unified Auditで監査証跡レコードがどのように記録されるか紹介します。

Unified Auditingと必須監査

 従来の必須監査では、SYSDBAおよびSYSOPER権限で接続したユーザーの接続、データベースの起動・停止のタイミングで、OS上のファイルに監査ログが記録されました。

 以下は、「sqlplus / as sysdba」を実行し、アイドルインスタンス(データベースインスタンスが停止している状態)に接続した際に必須監査機能で記録されたログの内容です。

必須監査ログの例(OSファイル)

Fri Jul 12 14:40:10 2013 +09:00
LENGTH : '149'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/2'
STATUS:[1] '0'
DBID:[0] ''

 Unified Auditingでも、SYSDBAおよびSYSOPER権限で接続したユーザーの接続、データベースの起動・停止のタイミングで監査ログがSYSAUX表領域に記録されます。

 以下は、「sqlplus / as sysdba」を実行し、アイドルインスタンスに接続した際にUnified Auditingで記録されたログの内容です。

UNIFIED_AUDIT_TRAIL ビュー確認例

SELECT to_char(event_timestamp) as time,audit_type,action_name,dbusername,sql_text 
FROM UNIFIED_AUDIT_TRAIL ORDER BY event_timestamp;
TIME                     AUDIT_TYPE       ACTION_NAME  DBUSERNAME   SQL_TEXT
------------------------ ---------------- ------------ ------------ --------
・・・
13-07-15 09:10:02.105559 Standard         LOGON        SYS          CONNECT
・・・

 上記の通り、Unified Auditingでも従来の必須監査と同様に、アイドルインスタンスに接続したタイミングでのログも記録されました。ただ、Unified Auditingは従来の必須監査と異なり、ログはSYSAUX表領域に保存されます。インスタンスが停止しておりデータベースが動作できないタイミングであるにもかかわらず、データベース内に監査ログが記録されています。起動していないデータベースに監査ログが記録されているこの状況を奇妙に思われた方がいらっしゃるかもしれません。

 後ほど説明しますが、Unified Auditingでは、監査ログの非同期の書き込みを実現するために「SGAキュー」に情報を一時プールしてからSYSAUX領域に書き込んでいます。書き込みが間に合わずにSGAキューがあふれてしまう場合は、その情報をバイナリファイルとして出力します。このバイナリファイルは、インスタンス停止時における監査ログの取得でも活用されているようです。

 SQL*Plusでアイドルインスタンスに接続した場合、筆者の環境では$ORACLE_BASE/audit/$ORACLE_SID以下にora_audit_00.binという名前のファイルが作成されました。バイナリファイルですが、「CONNECT」や「SYSDBA」という文字列は確認できました。インスタンス停止時もSYSAUX表領域に書き込みを行えないため、バイナリファイルとして一時的に情報を出力しているようです。

 これらの事実より、このバイナリファイルをデータベース起動後に取り込むことで、インスタンス停止中に発生した監査ログもデータベース内に記録していると判断しています。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。