はじめに
Oracleの監査機能を使うと、あるテーブルに対する操作をバインド変数含め、SQLレベルで記録できると聞いたので試してみました。
ソフトバンククリエイティブ
売り上げランキング: 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回 標準監査の基本的な使い方
今回は、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ビューで参照できます。
おわりに
以上が監査機能のうちの文監査と呼ばれる機能の簡単な使い方です。
監査機能は使い方次第で詳細なログが取得できますが、放っておくと大量に蓄積されるのでどのレベルで監査レコードを記録するかを決めておく必要があります。