機械翻訳について

85 DBMS_FGA

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

この章のトピックは、次のとおりです:

85.1 DBMS_FGAのセキュリティ・モデル

監査ポリシーを作成するには、AUDIT_ADMINロールとDBMS_FGAパッケージに対するEXECUTE権限が必要です。 DBMS_FGAは実行者権限のパッケージです。

ノート:

Oracle Database 23ai以降では、DBMS_FGAパッケージで作成されたファイングレイン監査ポリシーによって、監査レコードが統合監査証跡に生成され、UNIFIED_AUDIT_TRAILデータ・ディクショナリ・ビューを使用して表示できます。

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

85.2 DBMS_FGAの操作上のノート

このパッケージは、コストベースの最適化にのみ使用できます。 ルールベースのオプティマイザでは、行のフィルタの前に監査の監視が発生する可能性があるため、不要な監査レコードが生成される場合があります。

ルールベースのオプティマイザおよびコストベースのオプティマイザのどちらの場合でも、UNIFIED_AUDIT_TRAILビューのSQL_TEXT列とSQL_BINDS列を問い合せて、SQLテキストおよび対応して発行されるバインド変数を分析できます。

85.3 DBMS_FGAサブプログラムの要約

この表は、DBMS_FGAサブプログラムについて説明しています。

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

サブプログラム 説明

ADD_POLICYプロシージャ

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

DISABLE_POLICYプロシージャ

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

DROP_POLICYプロシージャ

監査方針を削除します。

ENABLE_POLICYプロシージャ

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

85.3.1 ADD_POLICYプロシージャ

このプロシージャは、監査条件として提供された述語を使用して、監査ポリシーを作成します。

構文

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

パラメータ

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

パラメータ 説明

object_schema

監査するオブジェクトのスキーマ。 NULLの場合、現在のスキーマと想定されます。

object_name

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

policy_name

ポリシーの一意の名前。 空白やカンマなどの特殊文字を入力しないでください。 ポリシー名に特殊文字を使用する場合は、名前を引用符で囲みます。

audit_condition

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

audit_column

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

handler_schema

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

handler_module

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

enable

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

statement_types

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

audit_trail

このパラメータは設定しないでください。サポートされなくなりました。 すべての監査レコードが統合監査証跡に書き込まれ、UNIFIED_AUDIT_TRAILデータ・ディクショナリ・ビューを問い合せることで表示できます。

audit_column_opts

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

policy_owner

ファイングレイン監査ポリシーを所有するユーザー。 ただし、この設定はユーザー指定の引数ではありません。 Oracle Data Pumpクライアントは、この設定を内部で使用して、ファイングレイン監査ポリシーを適宜再作成します。

使用上のノート

  • 表またはビューには、最大256個のファイングレイン監査ポリシーを適用できます。

  • 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は、このポリシーを作成したユーザーの権限を使用して評価されます。

  • audit_condition設定の場合、同じ実表でauditable文を実行するため、ファンクションをaudit_condition設定に含めないでください。 たとえば、HR.EMPLOYEES表に対してINSERT文を実行するファンクションを作成するとします。 ポリシーのaudit_conditionには、このファンクションが含まれていて、これは(statement_typesパラメータにより設定される)INSERT文のポリシーです。 このポリシーが使用されると、ファンクションはシステムのメモリーが足りなくなるまで再帰的に実行します。 これにより、ORA-1000: 最大オープン・カーソル数を超えました。またはORA-00036: 再帰的SQLレベルの最大値(50)を超えましたのエラーが発生する場合があります。

  • DBMS_FGA.ENABLE_POLICY文またはDBMS_FGA.DISABLE_POLICY文を、条件に含まれるポリシーのファンクションから発行しないでください。

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

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

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

  • 従来の監査はサポートされなくなったため、audit_trailパラメータは省略してください。監査レコードは統合監査証跡に書き込まれ、UNIFIED_AUDIT_TRAILデータ・ディクショナリ・ビューを問い合せることで表示できます。

  • クレジット・カード情報などの機密データもクリアテキストで記録できることに注意してください。

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

    ALTER SYSTEM SET AUDIT_FILE_DEST =  new_directory DEFERRED

    Oracle Database 23ai以降、AUDIT_FILE_DESTパラメータは非推奨です。

  • 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文は監査されません。

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

  • エラー処理は、AUDIT_TRAIL=OSの場合と同じです。 監査レコードの書込み中にエラーが発生した場合、監査対象の操作は失敗し、アラート・メッセージがログに記録されます。

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

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

  • ファイングレイン監査ハンドラ・モジュールには、明示的なCOMMIT文、ROLLBACK文およびDDL文を含めないでください。

参照:

ファイングレイン監査ポリシーに電子メール・アラート・ハンドラを作成する例は、『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_column_opts  =>   DBMS_FGA.ANY_COLUMNS,
   policy_owner       =>  'sec_admin); 

85.3.2 DISABLE_POLICYプロシージャ

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

構文

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

パラメータ

表85-3 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');

85.3.3 DROP_POLICYプロシージャ

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

構文

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

パラメータ

表85-4 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パラメータで指定されたオブジェクトを削除したり、監査ポリシーを作成したユーザーを削除した場合、自動的に監査ポリシーが削除されます。

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

85.3.4 ENABLE_POLICYプロシージャ

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

構文

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

パラメータ

表85-5 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);