85 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パッケージ・サブプログラム
サブプログラム | 説明 |
---|---|
監査条件として提供された述語を使用して、監査方針を作成します。 |
|
監査方針を無効化します。 |
|
監査方針を削除します。 |
|
監査方針を有効化します。 |
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。 |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 空白やカンマなどの特殊文字を入力しないでください。 ポリシー名に特殊文字を使用する場合は、名前を引用符で囲みます。 |
|
監視条件を示す行の条件。 |
|
アクセスのチェックを行う列。 OLS非表示列やオブジェクト・タイプ列なども含まれます。 デフォルトの |
|
イベント・ハンドラを含むスキーマ。 デフォルトの |
|
イベント・ハンドラのファンクション名で、必要に応じてパッケージ名を含みます。 このファンクションは、問合せの監査条件と一致する最初の行が処理された後でのみ実行されます。 例外が発生してプロシージャが異常終了すると、ユーザーのSQL文も異常終了します。 |
|
|
|
このポリシーを適用できるSQL文タイプ( |
|
このパラメータは設定しないでください。サポートされなくなりました。 すべての監査レコードが統合監査証跡に書き込まれ、 |
|
|
|
ファイングレイン監査ポリシーを所有するユーザー。 ただし、この設定はユーザー指定の引数ではありません。 Oracle Data Pumpクライアントは、この設定を内部で使用して、ファイングレイン監査ポリシーを適宜再作成します。 |
使用上のノート
-
表またはビューには、最大256個のファイングレイン監査ポリシーを適用できます。
-
object_schema
が指定されていない場合は、現在のスキーマと想定されます。 -
FGAポリシーは、LOB列などの行外の列には適用しないでください。
-
各監査方針は、問合せに対し個別に適用されます。 ただし、そのポリシーの
audit_condition
を満たし、戻される行の数に関係なく、ポリシーごとに生成される監査レコードは多くても1つです。 つまり、戻される行のうちの何行が表で定義された監査条件を満たしているかに関係なく、それらの各ポリシーに対し、監査レコードは1つだけ生成されます。 -
FGAポリシーが定義された表で、ファスト・パス・インサートまたはベクトル化された更新を受け取ると、それらの操作の前にこのヒントは自動的に無効になります。 ヒントを無効にすると、ポリシーの条件に従って監査が行われます。 (ファスト・パス・インサートの1つの例は、文
INSERT-WITH-APPEND-hint
です。) -
audit_condition
は、挿入、更新または削除される行の値を使用して評価できるブール式でなければなりません。 この式では、ファンクション(USER
ファンクション、SYS_CONTEXT
ファンクションなど)も使用できます。この式では、演算子(
AND
、OR
など)を使用して条件を組み合せないでください。audit_condition
にはNULL
を指定(または指定を省略)できます。これはTRUE
として解釈されますが、次の要素を含めることはできません。-
副問合せまたは順序。
-
SYS_CONTEXT
ファンクションを使用してアクセスした場合は、USERENV
ネームスペースの次の属性:-
CURRENT_SQL
-
CURRENT_SQL_LENGTH
-
CURRENT_BIND
-
-
疑似列
LEVEL、PRIORまたはROWNUM
の使用。
指定した列("
audit_column
")に影響を与える指定したすべての文("statement_types
")の監査を実行するために、1=1
の監査条件を指定する必要はなくなりました。audit_condition
にNULL
値を指定することで、処理された行がなくても監査が行われるため、このポリシーが定義された表に対するすべての処理が監査されます。 -
-
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_opts
をDBMS_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
です。 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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。 |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 |
使用上のノート
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。 |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 |
|
|
例
DBMS_FGA.ENABLE_POLICY ( object_schema => 'scott', object_name => 'emp', policy_name => 'mypolicy1', enable => TRUE);