Audit Trailについての検証 その5
Oracleデータベースの監査機能である、Audit Trail に関する性能検証、機能検証をLevel1-4でまとめた人気コンテンツのeBook版。標準監査機能の基本から応用まで全8回で解説。
Level 1)Audit sessionなどによる文監査
Level 2)オブジェクト監査
Level 3)ファイングレイン監査 Basic
Level 4)ファイングレイン監査 Advanced
*eBook版のダウンロードをご希望の方は、画像をクリック
<Audit Trailについての検証 ~その5~>
ペンネーム ベロ
先週はちょっと寄り道をしてしまいましたが、今週は気を取り直しては9iから
の新機能「ファイングレイン監査」を見ていきたいと思います。
今までの監査では監査対象としてオブジェクトの指定しかできませんでした。
しかし、ファイングレイン監査を用いるとアクセスに対する監査で今までより
も、より細かな監査条件を設定することができます。
具体的な監査条件として、オブジェクトの指定に加えて以下の条件を指定する
ことができます。
□ 列の指定 ファイングレイン監査では指定した列に対するアクセスのみを監査するこ とができます。 □ 条件の指定 ファイングレイン監査ではSQL文の条件句(WHERE句)の形式で監査条件を指 定することができます。 また、ファイングレイン監査では詳細な監査結果を記録することができます。 □ SYS.DBA_FGA_AUDIT_TRAILビュー 監査結果は監査レコードとしてSYS.DBA_FGA_AUDIT_TRAILビューに記録さ れます。 □ イベント・ハンドラ SYS.DBA_FGA_AUDIT_TRAILビューとは別に、監査を行なった際にどのような 記録を残すかをイベント・ハンドラとして自由に定義することができます。
ファイングレイン監査で用いられる監査ポリシーを設定するためにSYS.DBMS_FGA
パッケージが用意されています。監査ポリシーを定義することによって監査イ
ベントをトリガーするデータ・アクセス条件を指定することができます。
■ ADD_POLICYプロシージャ — 監査ポリシーを表やビューに設定します。
■ DROP_POLICYプロシージャ — 監査ポリシーを削除します。
■ ENABLE_POLICYプロシージャ — 監査ポリシーを有効化します。
■ DISABLE_POLICYプロシージャ — 監査ポリシーを無効化します。
注1) ファイングレイン監査ではCBOを利用した問合せのみがサポート対象となります。
^^^^^^^^^^^^^^^^^^^^^^^
RBOを利用した問合せを行なうと不要な監査レコードが発生します。
注2)監査機能の初期化パラメータ「AUDIT_TRAIL」とは無関係に監査を実施します。
今回はORABMユーザのCUSTOMER表に対し、C_IDカラムを以下の条件でSELECTした
場合に監査を行うような監査ポリシーを定義する。さらに、イベント・ハンドラ
として、詳細情報をファイルに出力するプロシージャを定義してみる。
【監査ポリシー】
ORABM.CUSTOMER表に対してC_ID=30をWHERE句で指定したSELECT文に対して監査
レコードを生成するとともに、詳細情報を監査ファイルに出力する。
【イベント・ハンドラ】
監査ファイル「aud_obj.aud」に以下の内容を出力する。
ファイル作成日付
監査対象になったDBユーザ名
監査対象になったOSユーザ名
SQLを発行したホスト名
SQLを発行したホストのIPアドレス
実行したSQL
FGAのポリシー名
監査対象のスキーマ名
監査対象のオブジェクト名
※ 初期化パラメータのutl_file_dirに適切な値を設定しておいてください。
では早速監査ポリシーの定義を行ってみよう。
analyze table customer compute statistics; 表が分析されました。
1. イベント・ハンドラの作成
^^^^^^^^^^^^^^^^^^^^^^^^^^^
create or replace procedure aud_obj_proc( ←(1)
schema_name varchar2,
table_name varchar2,
policy_name varchar2)
is
file_id utl_file.file_type;
sdate varchar2(19) := to_char(sysdate,'yyyy/mm/dd hh24:mi:ss');
aud_file_path varchar2(64) := '/home/oracle/OraHome1/rdbms/audit';
file_name varchar2(20) := 'audit_obj.aud';
begin
file_id := utl_file.fopen(aud_file_path,file_name,'A');
utl_file.put_line(file_id,'');
utl_file.put_line(file_id,sdate);
utl_file.put_line(file_id,'ACTION : SELECT');
utl_file.put_line(file_id,'DB USER: '||SYS_CONTEXT('USERENV','SESSION_USER'));
utl_file.put_line(file_id,'OS USER: '||SYS_CONTEXT('USERENV','OS_USER'));
utl_file.put_line(file_id,'HOST : '||SYS_CONTEXT('USERENV','HOST'));
utl_file.put_line(file_id,'IPADDR : '||SYS_CONTEXT('USERENV','IP_ADDRESS'));
utl_file.put_line(file_id,'SQL_TXT: '||SYS_CONTEXT('USERENV','CURRENT_SQL'));
utl_file.put_line(file_id,'POLICY : '||policy_name);
utl_file.put_line(file_id,'SCHEMA : '||schema_name);
utl_file.put_line(file_id,'OBJECT : '||table_name);
utl_file.fclose(file_id);
end;
/
2. 監査ポリシーの定義
^^^^^^^^^^^^^^^^^^^^^
execute dbms_fga.add_policy(- ←(2) object_schema => 'orabm',- --監査対象スキーマ指定 object_name => 'customer',- --監査対象オブジェクト指定 policy_name => 'aud_obj_policy',- --監査ポリシー指定 audit_condition => 'c_id=30',- --監査条件指定 audit_column => 'c_id',- --監査カラム指定 handler_schema => 'orabm',- --ハンドラプロシージャのスキーマ指定 handler_module => 'aud_obj_proc',- --ハンドラプロシージャ名指定 enable => true); --監査ポリシーを有効にする
(1)のイベント・ハンドラとして定義するプロシージャは3つの引数をとります。
それぞれの引数は順に、監査オブジェクトのスキーマ名、監査オブジェクト名、
監査ポリシー名です。
(2)の監査ポリシーの定義で、ポリシー名を「aud_obj_policy」として定義し、
イベント・ハンドラとして(1)で作成した「aud_obj_proc」を設定しています。
それでは、SQLをいくつか実行してみる・・・
(1).select c_id from customer where c_id = 30; (2).select c_id from customer where c_id = 1; (3).select c_data from customer where c_id = 30; (4).select c_data from customer where c_id = 1;
実際に監査対象となったSQLをDBA_FGA_AUDIT_TRAILより検索
select to_char(timestamp,'yyyy/mm/dd hh24:mi:ss') timestamp
,db_user
,os_user
,object_schema
,object_name
,policy_name
,sql_text
from dba_fga_audit_trail
order by timestamp;
TIMESTAMP DB_US OS_US OBJECT_SCH OBJECT_NAM POLICY_NAM SQL_TEXT
-------------------- ----- ----- ---------- ---------- ---------- ----------
2003/09/01 18:09:42 ORABM kshin ORABM CUSTOMER AUD_OBJ_PO select c_i
kub LICY d from cus
tomer wher
e c_id = 3
0
2003/09/01 18:10:02 ORABM kshin ORABM CUSTOMER AUD_OBJ_PO select c_d
kub LICY ata from c
ustomer wh
ere c_id =
30
監査ポリシーとして定義したWHERE句の条件以外のSQLは監査されていないことが
わかる。(監査対象となるのは上記SQLの内(1)、(3)のみ)
更に先ほど設定したイベント・ハンドラにより作成されたファイルを確認してみる。
$ cat $ORACLE_HOME/rdbms/audit/aud_obj.aud
2003/09/01 18:09:42 ACTION : SELECT DB USER: ORABM OS USER: kshinkub HOST : INSIGHTKSHINKUB IPADDR : xxx.xxx.xxx.xxx SQL_TXT: select c_id from customer where c_id = 30 POLICY : AUD_OBJ_POLICY SCHEMA : ORABM OBJECT : CUSTOMER 2003/09/01 18:10:02 ACTION : SELECT DB USER: ORABM OS USER: kshinkub HOST : INSIGHTKSHINKUB IPADDR : xxx.xxx.xxx.xxx SQL_TXT: select c_data from customer where c_id = 30 POLICY : AUD_OBJ_POLICY SCHEMA : ORABM OBJECT : CUSTOMER
今回はイベント・ハンドラとして外部ファイルに監査履歴を残すプロシージャ
を定義しましたが、このプロシージャにより柔軟な監査が可能となります。
特定の重要なデータに対してこのような監査を実施し、定期的にファイルを監視
することが大事。システム初期段階は通常のAUDIT監査を実施し、もっと詳細かつ
柔軟に監査を行いたいという状況が発生した場合には有効な機能ではないでしょうか。
食欲の秋が待ち遠しい、茅ヶ崎より
