!!!Oracle Database10g アクティビティの監査 [Oracle][Oracle Database10g] !!提供される監査 以下の3つの監査が提供されている +データベース監査 +値ベース監査 +ファイングレイン監査(FGA) !!データベース監査 *監査対象のイベントに関して、発生したイベント、時間、発生させたユーザー、クライアントマシンなどの情報を取得できる ![AUDIT_TRAIL|http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19228-04/initparams.htm#71200]で監査を使用可能にする *http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-04/auditing.htm#115334 AUDIT_TRAIL = { none | os | db | db,extended | xml | xml,extended } ,オプション,内容 ,none,データベースの監査を使用禁止にします。 ,os,データベースの監査を使用可能にし、すべての監査レコードをオペレーティング・システムの監査証跡に書き込み。 ,db,データベースの監査を使用可能にし、すべての監査レコードをデータベースの監査証跡(SYS.AUD$表)に書き込み。 ,db,extended,データベースの監査を使用可能にし、すべての監査レコードをデータベースの監査証跡(SYS.AUD$表)に書き込み、さらに、SYS.AUD$表のSQLBINDおよびSQLTEXT CLOB列にデータを移入。 ,xml,データベースの監査を使用可能にし、すべての監査レコードをXML形式のOSファイルに書き込みます。 ,xml,extended,データベースの監査を使用可能にし、SqlTextおよびSqlBind値を含め、監査証跡のすべての列を出力します。 *オプション指定(os, xml, xml,extendedにより、ファイルに書き出される場合、[AUDIT_FILE_DEST|http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19228-04/initparams.htm#70855]に書き出される。 ""SQLBINDおよびSQLTEXTには、データベース初期化ファイルinit.oraでAUDIT_TRAIL=DB_EXTENDEDを指定しないかぎりデータは移入されません。 これは、CLOBデータの移入が比較的高コストであるためです。 ::AUDIT_TRAILを変更 SQL> alter system set audit_trail = db scope=spfile; System altered. ::データベースを再起動し、確認 SQL> show parameters audit_ NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_file_dest string /opt/oracle/app/admin/oradb1/a dump audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string DB ![AUDIT|http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_4.html#21139]で監査を開始する *後続のユーザー・セッションでのSQL文の実行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の実行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。 *特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。 SQL> audit all by access; Audit succeeded. ::確認 {{ref_image ora_aud01.jpg}} !!値ベース監査 *値ベース監査は、データベースの監査を拡張したもので、監査対象のイベントだけでなく、実際の値も取得する。 *データベーストリガーを使用して実装 *値の変更のたびに監査トリガーが実行されるため、データベースへの負荷が高くなることによるパフォーマンスの劣化に注意する *[自律型トリガーの使用|http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/sqloperations.html#16794] ::監査対象のテーブル SQL> desc exam.test Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER NAME CHAR(10) ::監査情報格納テーブルの作成 SQL> create table system.test_audit ( test_id number, up_date date, 2 new_name char(10), old_name char(10) ); Table created. ::トリガーの作成 SQL> create or replace trigger system.audit_test 2 before update of name on exam.test for each row 3 declare 4 pragma autonomous_transaction; 5 begin 6 insert into system.test_audit values( :old.id, sysdate, 7 :new.name, :old.name ); 8 commit; 9 end; 10 / ::1行更新 SQL> update test set name = 'AAAAA' where id = 4; 1行が更新されました。 ::監査テーブルが更新された SQL> select * from system.test_audit; TEST_ID UP_DATE NEW_NAME OLD_NAME ---------- -------- ---------- ---------- 4 09-07-09 AAAAA jkl !![ファイングレイン監査|http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-04/cfgaudit.htm#140653](FGA) *SQL分を監査するには、ファイングレイン監査を利用する *データベース監査を拡張し、発生したアクションだけでなく、発行されたSQLも取得 *DBMS_FGAパッケージを使用して、対象となる表やビューに監査ポリシー(FGAポリシー)を作成 *詳細な監査条件を指定することによって、標準監査よりも詳細な監査を実施でき、不適切な監査または不要な監査を最小限に抑えることができる *監査を使用可能にするときに、AUDIT_TRAILを設定する必要はなく、適切と思われるFGA方針を追加および削除して、監視する特定の操作またはオブジェクトに適用する *FGAポリシーの作成には、DBMS_FGA.ADD_POLICYプロシージャを使用 *監査レコードは、SYS.FGA_LOG$表に格納され、DBA_FGA_AUDIT_TRAILビューを介してアクセスできる !FGA_POLICYの作成 SQL> execute dbms_fga.add_policy ( - > object_schema => 'exam', - > object_name => 'test', - > policy_name => 'chk_exam_test', - > audit_condition => 'id > 0', - > audit_column => 'name', - > statement_types => 'insert,update,delete,select'); PL/SQL procedure successfully completed. ::NULL監査条件 *audit_conditionにNULLを指定(または指定を省略)すると、この指定はTRUEとして解釈され、指定列(audit_column)に影響を与える指定アクション(statement_types)の監査が保証されます。 !監査対象のテーブルを操作 SQL> conn exam/north123@oradb1; 接続されました。 SQL> select * from test 2 ; ID NAME ---------- -------------------- 4 jkl 3 ghi SQL> insert into test values (5, 'mno'); 1行が作成されました。 SQL> delete from test where id = 3; 1行が削除されました。 !監査ログを確認 {{ref_image ora_aud02.jpg}} !監査エントリを確認するデータディクショナリ ,データディクショナリ,内容 ,DBA_FGA_AUDIT_TRAIL,すべてのFGAイベントを確認 ,ALL_AUDIT_POLICIES,現行ユーザーがアクセス可能なオブジェクトのすべてのFGAポリシーを確認 ,DBA_AUDIT_POLICIES,データベース内のすべてのFGAポリシーを確認 ,USER_AUDIT_POLICIES,現行ユーザースキーマのFGAポリシーを確認 ::ALL_AUDIT_POLICIES {{ref_image ora_aud03.jpg}} ::DBA_AUDIT_POLICIES {{ref_image ora_aud04.jpg}}