| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Oracle Database10g アクティビティの監査」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Oracle Database10g アクティビティの監査== [Oracle][Oracle Database10g] ===提供される監査=== 以下の3つの監査が提供されている #デ…」)
 
 
(同じ利用者による、間の3版が非表示)
1行目: 1行目:
==Oracle Database10g アクティビティの監査==
+
==[[Oracle Database10g アクティビティの監査]]==
[Oracle][Oracle Database10g]
+
[[Oracle]] | [[Oracle Database10g]] |
  
 
===提供される監査===
 
===提供される監査===
14行目: 14行目:
 
*http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-04/auditing.htm#115334
 
*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 }  
+
  AUDIT_T[[R]]AIL = { none | os | db | db,extended | xml | xml,extended }  
  
 
{|class="wikitable"
 
{|class="wikitable"
30行目: 30行目:
 
|-
 
|-
 
|db,extended
 
|db,extended
|データベースの監査を使用可能にし、すべての監査レコードをデータベースの監査証跡(SYS.AUD$表)に書き込み、さらに、SYS.AUD$表のSQLBINDおよびSQLTEXT CLOB列にデータを移入。
+
|データベースの監査を使用可能にし、すべての監査レコードをデータベースの監査証跡(SYS.AUD$表)に書き込み、さらに、SYS.AUD$表の[[SQL]]BINDおよび[[SQL]]TEXT CLOB列にデータを移入。
 
|-
 
|-
 
|xml
 
|xml
|データベースの監査を使用可能にし、すべての監査レコードをXML形式のOSファイルに書き込みます。
+
|データベースの監査を使用可能にし、すべての監査レコードを[[XML]]形式のOSファイルに書き込みます。
 
|-
 
|-
 
|xml,extended
 
|xml,extended
42行目: 42行目:
 
*オプション指定(os, xml, xml,extendedにより、ファイルに書き出される場合、[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19228-04/initparams.htm#70855 AUDIT_FILE_DEST]に書き出される。
 
*オプション指定(os, xml, xml,extendedにより、ファイルに書き出される場合、[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19228-04/initparams.htm#70855 AUDIT_FILE_DEST]に書き出される。
  
<blockquote>SQLBINDおよびSQLTEXTには、データベース初期化ファイルinit.oraでAUDIT_TRAIL=DB_EXTENDEDを指定しないかぎりデータは移入されません。 これは、CLOBデータの移入が比較的高コストであるためです。  </blockquote>
+
&lt;blockquote&gt;[[SQL]]BINDおよび[[SQL]]TEXTには、データベース初期化ファイルinit.oraでAUDIT_TRAIL=DB_EXTENDEDを指定しないかぎりデータは移入されません。 これは、CLOBデータの移入が比較的高コストであるためです。  &lt;/blockquote&gt;
  
=====AUDIT_TRAILを変更=====
+
=====AUDIT_T[[R]]AILを変更=====
  SQL> alter system set audit_trail = db scope=spfile;
+
  [[SQL]]&gt; alter system set audit_trail = db scope=spfile;
 
   
 
   
 
  System altered.
 
  System altered.
  
 
=====データベースを再起動し、確認=====
 
=====データベースを再起動し、確認=====
  SQL> show parameters audit_
+
  [[SQL]]&gt; show parameters audit_
 
   
 
   
 
  NAME                                TYPE        VALUE
 
  NAME                                TYPE        VALUE
60行目: 60行目:
 
  audit_trail                          string      DB
 
  audit_trail                          string      DB
 
====[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_4.html#21139 AUDIT]で監査を開始する====
 
====[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/statements_4.html#21139 AUDIT]で監査を開始する====
*後続のユーザー・セッションでのSQL文の実行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の実行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。
+
*後続のユーザー・セッションでの[[SQL]]文の実行の監査。特定の[[SQL]]文、または特定のシステム権限によって許可されたすべての[[SQL]]文の実行を監査できます。[[SQL]]文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。
 
*特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。
 
*特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。
  
  SQL> audit all by access;
+
  [[SQL]]&gt; audit all by access;
 
   
 
   
 
  Audit succeeded.
 
  Audit succeeded.
78行目: 78行目:
  
 
=====監査対象のテーブル=====
 
=====監査対象のテーブル=====
  SQL> desc exam.test
+
  [[SQL]]&gt; desc exam.test
 
   Name                                      Null?    Type
 
   Name                                      Null?    Type
 
   ----------------------------------------- -------- ----------------------------
 
   ----------------------------------------- -------- ----------------------------
   ID                                                NUMBER
+
   ID                                                NUMBE[[R]]
   NAME                                              CHAR(10)
+
   NAME                                              CHA[[R]](10)
  
 
=====監査情報格納テーブルの作成=====
 
=====監査情報格納テーブルの作成=====
  SQL> create table system.test_audit ( test_id number, up_date date,
+
  [[SQL]]&gt; create table system.test_audit ( test_id number, up_date date,
 
   2                            new_name char(10), old_name char(10) );
 
   2                            new_name char(10), old_name char(10) );
 
   
 
   
91行目: 91行目:
  
 
=====トリガーの作成=====
 
=====トリガーの作成=====
  SQL> create or replace trigger system.audit_test
+
  [[SQL]]&gt; create or replace trigger system.audit_test
 
   2    before update of name on exam.test for each row
 
   2    before update of name on exam.test for each row
 
   3  declare  
 
   3  declare  
103行目: 103行目:
  
 
=====1行更新=====
 
=====1行更新=====
  SQL> update test set name = 'AAAAA' where id = 4;
+
  [[SQL]]&gt; update test set name = 'AAAAA' where id = 4;
 
   
 
   
 
  1行が更新されました。
 
  1行が更新されました。
  
 
=====監査テーブルが更新された=====
 
=====監査テーブルが更新された=====
  SQL> select * from system.test_audit;
+
  [[SQL]]&gt; select * from system.test_audit;
 
   
 
   
     TEST_ID UP_DATE  NEW_NAME  OLD_NAME
+
     [[TEST]]_ID UP_DATE  NEW_NAME  OLD_NAME
 
  ---------- -------- ---------- ----------
 
  ---------- -------- ---------- ----------
 
           4 09-07-09 AAAAA      jkl
 
           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)===
 
===[http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-04/cfgaudit.htm#140653 ファイングレイン監査](FGA)===
*SQL分を監査するには、ファイングレイン監査を利用する
+
*[[SQL]]分を監査するには、ファイングレイン監査を利用する
*データベース監査を拡張し、発生したアクションだけでなく、発行されたSQLも取得
+
*データベース監査を拡張し、発生したアクションだけでなく、発行された[[SQL]]も取得
 
*DBMS_FGAパッケージを使用して、対象となる表やビューに監査ポリシー(FGAポリシー)を作成
 
*DBMS_FGAパッケージを使用して、対象となる表やビューに監査ポリシー(FGAポリシー)を作成
 
*詳細な監査条件を指定することによって、標準監査よりも詳細な監査を実施でき、不適切な監査または不要な監査を最小限に抑えることができる
 
*詳細な監査条件を指定することによって、標準監査よりも詳細な監査を実施でき、不適切な監査または不要な監査を最小限に抑えることができる
*監査を使用可能にするときに、AUDIT_TRAILを設定する必要はなく、適切と思われるFGA方針を追加および削除して、監視する特定の操作またはオブジェクトに適用する
+
*監査を使用可能にするときに、AUDIT_T[[R]]AILを設定する必要はなく、適切と思われるFGA方針を追加および削除して、監視する特定の操作またはオブジェクトに適用する
 
*FGAポリシーの作成には、DBMS_FGA.ADD_POLICYプロシージャを使用
 
*FGAポリシーの作成には、DBMS_FGA.ADD_POLICYプロシージャを使用
*監査レコードは、SYS.FGA_LOG$表に格納され、DBA_FGA_AUDIT_TRAILビューを介してアクセスできる
+
*監査レコードは、SYS.FGA_LOG$表に格納され、DBA_FGA_AUDIT_T[[R]]AILビューを介してアクセスできる
  
 
====FGA_POLICYの作成====
 
====FGA_POLICYの作成====
  SQL> execute dbms_fga.add_policy ( -
+
  [[SQL]]&gt; execute dbms_fga.add_policy ( -
  > object_schema => 'exam',      -
+
  &gt; object_schema =&gt; 'exam',      -
  > object_name => 'test',        -
+
  &gt; object_name =&gt; 'test',        -
  > policy_name => 'chk_exam_test', -
+
  &gt; policy_name =&gt; 'chk_exam_test', -
  > audit_condition => 'id > 0',          -
+
  &gt; audit_condition =&gt; 'id &gt; 0',          -
  > audit_column => 'name',      -
+
  &gt; audit_column =&gt; 'name',      -
  > statement_types => 'insert,update,delete,select');
+
  &gt; statement_types =&gt; 'insert,update,delete,select');
 
   
 
   
  PL/SQL procedure successfully completed.
+
  PL/[[SQL]] procedure successfully completed.
  
 
=====NULL監査条件=====
 
=====NULL監査条件=====
*audit_conditionにNULLを指定(または指定を省略)すると、この指定はTRUEとして解釈され、指定列(audit_column)に影響を与える指定アクション(statement_types)の監査が保証されます。
+
*audit_conditionにNULLを指定(または指定を省略)すると、この指定はT[[R]]UEとして解釈され、指定列(audit_column)に影響を与える指定アクション(statement_types)の監査が保証されます。
  
  
  
 
====監査対象のテーブルを操作====
 
====監査対象のテーブルを操作====
  SQL> conn exam/north123@oradb1;
+
  [[SQL]]&gt; conn exam/north123@oradb1;
 
  接続されました。
 
  接続されました。
  SQL> select * from test
+
  [[SQL]]&gt; select * from test
 
   2  ;
 
   2  ;
 
   
 
   
150行目: 150行目:
 
           3 ghi
 
           3 ghi
 
   
 
   
  SQL> insert into test values (5, 'mno');
+
  [[SQL]]&gt; insert into test values (5, 'mno');
 
   
 
   
 
  1行が作成されました。
 
  1行が作成されました。
 
   
 
   
  SQL> delete from test where id = 3;
+
  [[SQL]]&gt; delete from test where id = 3;
 
   
 
   
 
  1行が削除されました。
 
  1行が削除されました。
166行目: 166行目:
 
!内容
 
!内容
 
|-
 
|-
|DBA_FGA_AUDIT_TRAIL
+
|DBA_FGA_AUDIT_T[[R]]AIL
 
|すべてのFGAイベントを確認
 
|すべてのFGAイベントを確認
 
|-
 
|-
|ALL_AUDIT_POLICIES
+
|ALL_AUDIT_POLIC[[IE]]S
 
|現行ユーザーがアクセス可能なオブジェクトのすべてのFGAポリシーを確認
 
|現行ユーザーがアクセス可能なオブジェクトのすべてのFGAポリシーを確認
 
|-
 
|-
|DBA_AUDIT_POLICIES
+
|DBA_AUDIT_POLIC[[IE]]S
 
|データベース内のすべてのFGAポリシーを確認
 
|データベース内のすべてのFGAポリシーを確認
 
|-
 
|-
|USER_AUDIT_POLICIES
+
|USER_AUDIT_POLIC[[IE]]S
 
|現行ユーザースキーマのFGAポリシーを確認
 
|現行ユーザースキーマのFGAポリシーを確認
 
|-
 
|-
 
|}
 
|}
  
=====ALL_AUDIT_POLICIES=====
+
=====ALL_AUDIT_POLIC[[IE]]S=====
 
[[File:0877_ora_aud03.jpg]]
 
[[File:0877_ora_aud03.jpg]]
=====DBA_AUDIT_POLICIES=====
+
=====DBA_AUDIT_POLIC[[IE]]S=====
 
[[File:0878_ora_aud04.jpg]]
 
[[File:0878_ora_aud04.jpg]]

2020年2月16日 (日) 04:29時点における最新版

Oracle Database10g アクティビティの監査

Oracle | Oracle Database10g |

提供される監査

以下の3つの監査が提供されている

  1. データベース監査
  2. 値ベース監査
  3. ファイングレイン監査(FGA)

データベース監査

  • 監査対象のイベントに関して、発生したイベント、時間、発生させたユーザー、クライアントマシンなどの情報を取得できる

AUDIT_TRAILで監査を使用可能にする

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に書き出される。

<blockquote>SQLBINDおよびSQLTEXTには、データベース初期化ファイルinit.oraでAUDIT_TRAIL=DB_EXTENDEDを指定しないかぎりデータは移入されません。 これは、CLOBデータの移入が比較的高コストであるためです。 </blockquote>

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で監査を開始する

  • 後続のユーザー・セッションでのSQL文の実行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の実行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。
  • 特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。
SQL> audit all by access;

Audit succeeded.
確認

0875 ora aud01.jpg

値ベース監査

  • 値ベース監査は、データベースの監査を拡張したもので、監査対象のイベントだけでなく、実際の値も取得する。
  • データベーストリガーを使用して実装
  • 値の変更のたびに監査トリガーが実行されるため、データベースへの負荷が高くなることによるパフォーマンスの劣化に注意する
監査対象のテーブル
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

ファイングレイン監査(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行が削除されました。

監査ログを確認

0876 ora aud02.jpg

監査エントリを確認するデータディクショナリ

データディクショナリ 内容
DBA_FGA_AUDIT_TRAIL すべてのFGAイベントを確認
ALL_AUDIT_POLICIES 現行ユーザーがアクセス可能なオブジェクトのすべてのFGAポリシーを確認
DBA_AUDIT_POLICIES データベース内のすべてのFGAポリシーを確認
USER_AUDIT_POLICIES 現行ユーザースキーマのFGAポリシーを確認
ALL_AUDIT_POLICIES

0877 ora aud03.jpg

DBA_AUDIT_POLICIES

0878 ora aud04.jpg