ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

66 DBMS_FGA

DBMS_FGAパッケージは、ファイングレイン・セキュリティ機能を提供します。

この章では、次の項目について説明します。


DBMS_FGAの使用方法


セキュリティ・モデル

監査方針を管理するには、DBMS_FGAに対する実行権限が必要です。監査機能はユーザー環境およびアプリケーション・コンテキスト値をすべて獲得できるため、ポリシーを管理できるのは権限を付与されたユーザーに限定されます。ポリシーのイベント・ハンドラ・モジュールは、モジュールの所有者の権限で実行されます。


使用上の注意

このパッケージは、コストベースの最適化にのみ使用できます。ルールベースのオプティマイザでは、行のフィルタの前に監査の監視が発生する可能性があるため、不要な監査レコードが生成される場合があります。ルールベースのオプティマイザおよびコストベースのオプティマイザのどちらの場合でも、DBA_FGA_AUDIT_TRAILを参照して、SQLテキストおよび対応して発行されるバインド変数を分析できます。


DBMS_FGAサブプログラムの要約

表66-1 DBMS_FGAパッケージのサブプログラム

サブプログラム 説明

ADD_POLICYプロシージャ


監査条件として提供された述語を使用して、監査方針を作成します。

DISABLE_POLICYプロシージャ


監査方針を無効化します。

DROP_POLICYプロシージャ


監査方針を削除します。

ENABLE_POLICYプロシージャ


監査方針を有効化します。



ADD_POLICYプロシージャ

このプロシージャは、監査条件として提供された述語を使用して、監査方針を作成します。表またはビュー・オブジェクトのFGAポリシーの最大数は256です。

構文

DBMS_FGA.ADD_POLICY(
   object_schema      VARCHAR2, 
   object_name        VARCHAR2, 
   policy_name        VARCHAR2, 
   audit_condition    VARCHAR2, 
   audit_column       VARCHAR2, 
   handler_schema     VARCHAR2, 
   handler_module     VARCHAR2, 
   enable             BOOLEAN, 
   statement_types    VARCHAR2,
   audit_trail        BINARY_INTEGER IN DEFAULT,
   audit_column_opts  BINARY_INTEGER IN DEFAULT);

パラメータ

表66-2 ADD_POLICYプロシージャのパラメータ

パラメータ 説明 デフォルト値

object_schema

監査するオブジェクトのスキーマ。(NULLの場合、現在のログオン・ユーザーのスキーマと想定されます。)

NULL

object_name

監査するオブジェクトの名前。

-

policy_name

ポリシーの一意の名前。

-

audit_condition

監視条件を示す行の条件。NULLも指定できます(TRUEとして機能します)。

NULL

audit_column

アクセスのチェックを行う列。OLS非表示列やオブジェクト・タイプ列なども含まれます。デフォルトのNULLの場合、アクセスまたは影響を受ける列があれば監査が行われます。

NULL

handler_schema

イベント・ハンドラを含むスキーマ。デフォルトのNULLの場合、現在のスキーマが使用されます。

NULL

handler_module

イベント・ハンドラのファンクション名で、必要に応じてパッケージ名を含みます。このファンクションは、問合せの監査条件と一致する最初の行が処理された後でのみ実行されます。例外が発生してプロシージャが異常終了すると、ユーザーのSQL文も異常終了します。

NULL

enable

TRUE(デフォルト)の場合、ポリシーを有効化します。

TRUE

statement_types

このポリシーを適用できるSQL文タイプ(INSERTUPDATEDELETEまたはSELECTのみ)。

SELECT

audit_trail

ファイングレイン監査レコードの宛先(DBまたはXML)。また、fga_log$LSQLTEXTおよびLSQLBINDを移入するかどうかを指定します。

DB+EXTENDED

audit_column_opts

audit_columnパラメータに指定されたいずれかの列が問合せで参照された場合、またはそれらのすべての列が参照された場合にのみ、文を監査するかどうかを指定します。

ANY_COLUMNS


使用上の注意

  • object_schemaが指定されていない場合は、現行のログオン・ユーザーのスキーマと想定されます。

  • FGAポリシーは、LOB列などの行外の列には適用しないでください。

  • 各監査方針は、問合せに対し個別に適用されます。ただし、そのポリシーのaudit_conditionを満たし、戻される行の数に関係なく、ポリシーごとに生成される監査レコードは多くても1つです。つまり、戻される行のうちの何行が表で定義された監査条件を満たしているかに関係なく、それらの各ポリシーに対し、監査レコードは1つだけ生成されます。

  • FGAポリシーが定義された表で、ファスト・パス・インサートまたはベクトル化された更新を受け取ると、それらの操作の前にこのヒントは自動的に無効になります。ヒントを無効にすると、ポリシーの条件に従って監査が行われます。(ファスト・パス・インサートの1つの例は、文INSERT-WITH-APPEND-hintです。)

  • audit_conditionは、挿入、更新または削除される行の値を使用して評価できるブール式でなければなりません。この式では、ファンクション(USERファンクション、SYS_CONTEXTファンクションなど)も使用できます。

    この式では、演算子(ANDORなど)を使用して条件を組み合せないでください。audit_conditionにはNULLを指定(または指定を省略)できます。これはTRUEとして解釈されますが、次の要素を含めることはできません。

    • 副問合せまたは順序。

    • SYS_CONTEXTファンクションを使用してアクセスした場合は、USERENVネームスペースの次の属性:

      • CURRENT_SQL

      • CURRENT_SQL_LENGTH

      • CURRENT_BIND

    • 疑似列LEVEL、PRIORまたはROWNUMの使用。

    指定した列("audit_column")に影響を与える指定したすべての文("statement_types")の監査を実行するために、"1=1"の監査条件を指定する必要はなくなりました。audit_conditionNULL値を指定することで、処理された行がなくても監査が行われるため、このポリシーが定義された表に対するすべての処理が監査されます。

  • audit_conditionは、このポリシーを作成したユーザーの権限を使用して評価されます。

  • 監査ファンクション(handler_module)は、管理者用のアラート・メカニズムです。このファンクションに必要なインタフェースは、次のとおりです。

    PROCEDURE fname ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 )  AS ...
    

    ここで、fnameはプロシージャの名前、object_schemaは監査対象の表のスキーマの名前、object_nameは監査対象の表の名前、policy_nameは施行するポリシーの名前を表しています。監査ファンクションは、このファンクションの所有者の権限で実行されます。


    関連項目:

    ファイングレイン監査ポリシーに電子メール・アラート・ハンドラを作成する例は、『Oracle Databaseセキュリティ・ガイド』のファイングレイン監査ポリシーへの電子メール・アラートの追加に関するチュートリアルを参照してください。

  • audit_trailパラメータには、ファイングレイン監査証跡の書込み場所、および問合せのSQL TextおよびSQL Bind変数情報を(通常、LSQLTEXTおよびLSQLBINDという名前の列内に)含めるかどうかの両方を指定します。

    • audit_trailにXMLが含まれている場合、ファイングレイン監査レコードは、SQL内のAUDIT_FILE_DEST文によって指定されたディレクトリに格納されているXML形式のオペレーティング・システム・ファイルに書き込まれます。(デフォルトのAUDIT_FILE_DESTは、UNIX-based systemsでは$ORACLE_BASE/admin/$DB_UNIQUE_NAME/adump、Windows systemsでは$ORACLE_BASE\admin\$DB_UNIQUE_NAME\adumpです。)

    • audit_trailDBが含まれている場合、監査レコードはデータベース内のSYS.FGA_LOG$表に書き込まれます。ただし、読取り専用データベースの場合は、audit_trail設定に関係なく、Oracle Databaseによってファイングレイン監査レコードがXMLファイルに書き込まれます。

    • audit_trailにEXTENDEDが含まれている場合、監査証跡には、問合せのSQL TextおよびSQL Bind変数情報が含まれます。

      SQL Text情報では、監査証跡にクレジット・カード番号などの機密データが含まれている場合があることに注意してください。機密データの処理方法については、『Oracle Databaseセキュリティ・ガイド』の機密情報の監査に関する項を参照してください。

    • 次に例を示します。

      • audit_trailDBMS_FGA.DBに設定すると、監査証跡は、データベース内のSYS.FGA_LOG$表に送信され、SQL TextおよびSQL Bindは省略されます。

      • audit_trailDBMS_FGA.DB + DBMS_FGA.EXTENDEDに設定すると、監査証跡は、データベース内のSYS.FGA_LOG$表に送信され、SQL TextおよびSQL Bindが含まれます。

      • audit_trailDBMS_FGA.XMLに設定すると、監査証跡は、オペレーティング・システムに送信されるXMLファイルに書き込まれ、SQL TextおよびSQL Bindは省略されます。

      • audit_trailDBMS_FGA.XML + DBMS_FGA.EXTENDEDに設定すると、監査証跡は、オペレーティング・システムに送信されるXMLファイルに書き込まれ、SQL TextおよびSQL Bindが含まれます。

    audit_trailパラメータは、ALL_AUDIT_POLICIESビューに表示されます。

  • 次のコマンドを使用すると、オペレーティング・システムの接続先を変更できます。

    ALTER SYSTEM SET AUDIT_FILE_DEST = '<New Directory>' DEFERRED

  • XML監査ファイルは、多くのプラットフォームで<process_name>_<processId>.xmlという形式の名前(ora_2111.xmls002_11.xmlなど)になります。Windowsでは、<process_name>_<ThreadId>.xml(プロセスがスレッドとして実行されていない場合は<process_name>_ProcessId>.xml)という形式の名前になります。

  • audit_column_optsパラメータには、次の場合に文を監査するかどうかを指定します。

    • audit_columnパラメータに指定されているいずれかの列を問合せで参照する場合(audit_column_opts = DBMS_FGA.ANY_COLUMNS)、または

    • 指定されているすべての列が参照された場合(audit_column_opts = DBMS_FGA.ALL_COLUMNS)のみ

    デフォルトはDBMS_FGA.ANY_COLUMNSです。

    ALL_AUDIT_POLICIESビューにもaudit_column_optsが表示されます。

  • audit_column_optsDBMS_FGA.ALL_COLUMNSに設定すると、audit_column内のすべての列が文内で明示的に参照されている場合にのみSQL文が監査されます。これらの列は、同じSQL文内またはsub-select内で参照する必要があります。

    また、これらのすべての列は、単一表、単一ビューまたは別名を参照する必要があります。

    したがって、様々な表の別名から複数の列を選択するSQL文は監査されません。

V$XML_AUDIT_TRAILビュー

audit_trailパラメータに新しい値(XMLおよびXML+EXTENDED)を設定すると、ファイングレイン監査レコードがXML形式でオペレーティング・システムに書き込まれます。

オペレーティング・システム・ファイルに格納されている監査レコードは、アクセスの際にDBAが所有していないファイル・アクセス権が必要な場合があるため、データベースに格納されている監査レコードよりも安全性が高くなります。また、オペレーティング・システムに格納されている監査レコードは、データベースが一時的にアクセスできなくなった場合でも使用できるため、より高い可用性を提供します。

新しい動的ビューV$XML_AUDIT_TRAILでは、DBAがSQL問合せを介して監査レコードをXMLファイルから使用できるようになり、使いやすくなりました。このビューを問い合せると、AUDIT_FILE_DESTディレクトリ内のすべてのXMLファイル(.xml拡張子を持つすべてのファイル)の解析およびリレーショナル表フォーマットでの表示が実行されます。

DBA_COMMON_AUDIT_TRAILビューには、標準監査レコードおよびファイングレイン監査レコードのV$XML_AUDIT_TRAIL動的ビューの内容が含まれています。

XML監査ファイルは、すべてのプラットフォームで拡張子.xmlを持つファイルに格納されるため、動的ビューでは、次のスキーマを使用して、すべてのプラットフォーム上で同じように監査情報が表示されます。

表66-3 V$XML_AUDIT_TRAIL動的ビューの要素

要素 タイプ

AUDIT_TYPE

VARCHAR2(18)

SESSION_ID

NUMBER

PROXY_SESSIONID

NUMBER

STATEMENTID

NUMBER

ENTRYID

NUMBER

EXTENDED_TIMESTAMP

TIMESTAMP(6)WITH TIME ZONE

GLOBAL_UID

VARCHAR2(32)

DB_USER

VARCHAR2(30)

CLIENT_ID

VARCHAR2(64)

EXT_NAME

VARCHAR2(4000)

OS_USER

VARCHAR2(255)

USERHOST

VARCHAR2(128)

OS_PROCESS

VARCHAR2(16)

TERMINAL

VARCHAR2(255)

INSTANCE_NUMBER

NUMBER

OBJECT_SCHEMA

VARCHAR2(30)

OBJECT_NAME

VARCHAR2(128)

POLICY_NAME

VARCHAR2(30)

STATEMENT_TYPE

VARCHAR2(28)

TRANSACTIONID

RAW(8)

SCN

NUMBER

COMMENT_TEXT

VARCHAR2(4000)

SQL_BIND

VARCHAR2(4000)

SQL_TEXT

VARCHAR2(4000)


使用上の注意

  • すべてのXML監査レコードには、AUDIT_TYPE要素およびEXTENDED_TIMESTAMP要素が含まれていて、EXTENDED_TIMESTAMP要素はUTCゾーン(タイムゾーン情報なし)で出力されます。V$XML_AUDIT_TRAILビューを使用して取得された値は、セッション・タイムゾーンに変換されて出力されます。

  • SQL_TEXTおよびSQL_BIND要素の値(CLOBタイプの列)は、動的ビューには最初の4000文字のみ表示されます。SQL_TEXTおよびSQL_BIND要素の値は、元のXMLファイルでは4000文字を超えている場合があります。

  • SQL*Loaderなどのツールを使用して大量のXML監査ファイルをデータベース表にロードする場合は、V$XML_AUDIT_TRAILを問い合せると高速に処理できます。XML監査ファイルは、AUDIT_TRAIL=OSの場合にOSファイルに記述される同等のファイルより大きくなります。

  • エラー処理は、AUDIT_TRAIL=OSの場合と同様です。ディスクへの監査レコードの書込み中にエラーが発生した場合(AUDIT_FILE_DESTによって指定されたディレクトリに空きがない場合など)、監査操作は失敗します。アラート・メッセージがロギングされます。

  • ポリシーのイベント・ハンドラ・モジュールは、モジュールの所有者の権限で実行されます。

  • 再帰的ファイングレイン監査ハンドラを作成しないでください。たとえば、HR.EMPLOYEES表に対してINSERT文を実行するハンドラを作成するとします。このハンドラに関連付けられるポリシーは、(statement_typesパラメータにより設定される)INSERT文のポリシーです。このポリシーが使用されると、ハンドラはシステムのメモリーが足りなくなるまで再帰的に実行します。これにより、ORA-1000: 最大オープン・カーソル数を超えました。またはORA-00036: 再帰的SQLレベルの最大値(50)を超えましたのエラーが発生する場合があります。『Oracle Databaseセキュリティ・ガイド』も参照してください。

DBMS_FGA.ADD_POLICY (
   object_schema      =>  'scott', 
   object_name        =>  'emp', 
   policy_name        =>  'mypolicy1', 
   audit_condition    =>  'sal < 100', 
   audit_column       =>  'comm,sal', 
   handler_schema     =>   NULL, 
   handler_module     =>   NULL, 
   enable             =>   TRUE, 
   statement_types    =>  'INSERT, UPDATE', 
   audit_trail        =>   DBMS_FGA.XML + DBMS_FGA.EXTENDED, 
   audit_column_opts  =>   DBMS_FGA.ANY_COLUMNS); 

DISABLE_POLICYプロシージャ

このプロシージャは、監査方針を無効化します。

構文

DBMS_FGA.DISABLE_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 ); 

パラメータ

表66-4 DISABLE_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

監査するオブジェクトのスキーマ。(NULLの場合、現行のログオン・ユーザーのスキーマと想定されます。)

object_name

監査するオブジェクトの名前。

policy_name

ポリシーの一意の名前。


object_schemaのデフォルト値はNULLです。(NULLの場合、現行のログオン・ユーザーのスキーマと想定されます。)

DBMS_FGA.DISABLE_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');

DROP_POLICYプロシージャ

このプロシージャは、監査方針を削除します。

構文

DBMS_FGA.DROP_POLICY(
   object_schema  VARCHAR2, 
   object_name    VARCHAR2, 
   policy_name    VARCHAR2 );

パラメータ

表66-5 DROP_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

監査するオブジェクトのスキーマ。(NULLの場合、現行のログオン・ユーザーのスキーマと想定されます。)

object_name

監査するオブジェクトの名前。

policy_name

ポリシーの一意の名前。


使用上の注意

DBMS_FGAプロシージャは、現行のDMLトランザクションがある場合、それらがDDLイベント・トリガーの内部にないかぎり、操作前にコミットします。DDLトランザクションでは、DBMS_FGAプロシージャはDDLトランザクションの一部となります。object_schemaのデフォルト値はNULLです。(NULLの場合、現行のログオン・ユーザーのスキーマと想定されます。)


注意:

DBMS_FGA.ADD_POLICYプロシージャのobject_nameパラメータで指定されたオブジェクトを削除した場合、または監査ポリシーを作成したユーザーを削除した場合は、Oracle Databaseでは監査ポリシーが自動的に削除されます。

DBMS_FGA.DROP_POLICY (
object_schema   =>  'scott',
object_name     =>  'emp',
policy_name     =>  'mypolicy1');

ENABLE_POLICYプロシージャ

このプロシージャは、監査方針を有効化します。

構文

DBMS_FGA.ENABLE_POLICY(
   object_schema  VARCHAR2,
   object_name    VARCHAR2,
   policy_name    VARCHAR2,
   enable         BOOLEAN);

パラメータ

表66-6 ENABLE_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

監査するオブジェクトのスキーマ。(NULLの場合、現行のログオン・ユーザーのスキーマと想定されます。)

object_name

監査するオブジェクトの名前。

policy_name

ポリシーの一意の名前。

enable

TRUE(デフォルト)の場合、ポリシーを有効化します。


DBMS_FGA.ENABLE_POLICY (
object_schema    =>  'scott',
object_name      =>  'emp',
policy_name      =>  'mypolicy1',
enable           =>   TRUE);