読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Oracle 11gの監査機能で実行されたSQLを採取してみる

oracle
はじめに

Oracleの監査機能を使うと、あるテーブルに対する操作をバインド変数含め、SQLレベルで記録できると聞いたので試してみました。

【オラクル認定資格試験対策書】ORACLE MASTER Gold[Gold DBA11g](試験番号:1Z0-053)完全詳解+精選問題集 (オラクルマスタースタディガイド)
エディフィストラーニング株式会社
ソフトバンククリエイティブ
売り上げランキング: 129,902

事前準備

sysユーザで以下のコマンドを実行します。

show parameter AUDIT
NAME                 TYPE    VALUE                                 
-------------------- ------- ------------------------------------- 
audit_file_dest      string  C:\APP\ADMINISTRATOR\ADMIN\ORCL\ADUMP
audit_sys_operations boolean FALSE
audit_trail          string  DB

audit_trailがDBになっていると監査機能が有効化されています。
audit_trailの種類は以下のとおり。

・audit_trail : データベースの監査の有効化(NONE以外)、無効化(NONE)を制御する初期化パラメータ
・NONE : 標準監査の使用禁止(デフォルト)
・OS : 全ての監査レコードをオペレーティング・システム・ファイルへ書き込む
・DB : OSファイルへ常に書き込まれる監査レコードを除いてSYS.AUD$へ書き込む
・DB,EXTENDED : DBの設定に追加して、SQL文やバインド変数情報が付随される
・XML : XML形式でオペレーティング・システム・ファイルへ書き込む
・XML,EXTENDED : XMLの設定に追加して、SQL文やバインド変数情報が付随される
第32回 標準監査の基本的な使い方 はてなブックマーク - 第32回 標準監査の基本的な使い方

今回は、SQL文やバインド変数も取得したいので監査レベルをDB,EXTENDEDに変更します。
以下のコマンドで監査レベルを変更し、Oracleを再起動します。

alter system set AUDIT_TRAIL=DB,EXTENDED scope=SPFILE sid='*' ;
shutdown immediate
startup
監査対象テーブルを追加する

sysユーザで以下のコマンドを実行すると、hogeユーザのT_GAKUSEIテーブルに対するDML操作を監査できます。

AUDIT SELECT ON hoge.T_GAKUSEI
AUDIT INSERT ON hoge.T_GAKUSEI
AUDIT UPDATE ON hoge.T_GAKUSEI
AUDIT DELETE ON hoge.T_GAKUSEI
T_GAKUSEIテーブルにアクセスしてみる

バインド変数を使うようにして、以下のようなクエリを発行してみます。

variable v1 NUMBER;
execute :v1 := 125000;
select * from T_GAKUSEI WHERE GAKUSEKINO = :v1;

監査レコードはDBA_AUDIT_TRAILビューで参照できます。
f:id:replication:20151231221900j:plain

おわりに

以上が監査機能のうちの文監査と呼ばれる機能の簡単な使い方です。
監査機能は使い方次第で詳細なログが取得できますが、放っておくと大量に蓄積されるのでどのレベルで監査レコードを記録するかを決めておく必要があります。

関連記事