DBMS_FGA
パッケージは、ファイングレイン・セキュリティ機能を提供します。
この章では、次の項目について説明します。
セキュリティ・モデル
使用上の注意
監査方針を管理するには、DBMS_FGA
に対する実行権限が必要です。監査機能はユーザー環境およびアプリケーション・コンテキスト値をすべて獲得できるため、ポリシーを管理できるのは権限を付与されたユーザーに限定されます。ポリシーのイベント・ハンドラ・モジュールは、モジュールの所有者の権限で実行されます。
このパッケージは、コストベースの最適化にのみ使用できます。ルールベースのオプティマイザでは、行のフィルタの前に監査の監視が発生する可能性があるため、不要な監査レコードが生成される場合があります。 ルールベースのオプティマイザおよびコストベースのオプティマイザのどちらの場合でも、DBA_FGA_AUDIT_TRAIL
を参照して、SQLテキストおよび対応して発行されるバインド変数を分析できます。
表54-1 DBMS_FGAパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
監査条件として提供された述語を使用して、監査方針を作成します。 |
|
監査方針を無効化します。 |
|
監査方針を削除します。 |
|
監査方針を有効化します。 |
このプロシージャは、監査条件として提供された述語を使用して、監査方針を作成します。表またはビュー・オブジェクトの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);
パラメータ
表54-2 ADD_POLICYプロシージャのパラメータ
パラメータ | 説明 | デフォルト値 |
---|---|---|
|
監査するオブジェクトのスキーマ。( |
|
|
監査するオブジェクトの名前。 |
- |
|
ポリシーの一意の名前。 |
- |
|
監視条件を示す行の条件。 |
|
|
アクセスのチェックを行う列。OLS非表示列やオブジェクト・タイプ列なども含まれます。デフォルトの |
|
|
イベント・ハンドラを含むスキーマ。デフォルトの |
|
|
イベント・ハンドラのファンクション名。必要に応じてパッケージ名も含みます。このファンクションは、問合せの監査条件に一致する最初の行が処理された後にのみ起動されます。プロシージャが例外で失敗した場合、ユーザーのSQL文も失敗します。 |
|
|
TRUE(デフォルト)の場合、ポリシーを有効化します。 |
|
|
このポリシーを適用できるSQL文タイプ( |
|
|
ファイングレイン監査レコードの宛先(DBまたはXML)。 また、 |
|
|
audit_columnパラメータに指定されたいずれかの列が問合せで参照された場合、またはそれらのすべての列が参照された場合にのみ、文を監査するかどうかを指定します。 |
|
使用上の注意
object_schema
が指定されていない場合は、現行のログオン・ユーザーのスキーマと想定されます。
FGAポリシーは、LOB列などの行外の列には適用しないでください。
各監査方針は、問合せに対し個別に適用されます。 ただし、そのポリシーのaudit_condition
を満たし、戻される行の数に関係なく、ポリシーごとに生成される監査レコードは多くても1つです。つまり、戻される行のうちの何行が表で定義された監査条件を満たしているかに関係なく、それらの各ポリシーに対し、監査レコードは1つだけ生成されます。
FGAポリシーが定義された表で、ファスト・パス・インサートまたはベクトル化された更新を受け取ると、それらの操作の前にこのヒントは自動的に無効になります。ヒントを無効にすると、ポリシーの条件に従って監査が行われます(ファスト・パス・インサートの1つの例は文INSERT-WITH-APPEND-hint
です)。
audit_condition
は、挿入、更新または削除される行の値を使用して評価できるブール式でなければなりません。この条件にはNULL(または省略される)を指定できます。これはTRUE
と解釈されますが、次の要素を含めることはできません。
副問合せまたは順序。
SYSDATE
、UID
、USER
またはUSERENV
ファンクションの直接の使用。ただし、ユーザー定義ファンクションおよびその他のSQLファンクションでは、これらのファンクションを使用して、目的の情報を戻すことができます。
疑似列LEVEL
、PRIOR
またはROWNUM
の使用。
指定した列("audit_column
")に影響を与える指定したすべての文("statement_types
")の監査を実行するために、"1=1"の監査条件を指定する必要はなくなりました。NULL
を指定することで、処理された行がなくても、このポリシーが定義された表に対するすべての処理が監査されます。
監査ファンクション(handler_module
)は、管理者用のアラート・メカニズムです。このファンクションに必要なインタフェースは、次のとおりです。
PROCEDURE <fname> ( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 ) AS ...
ここで、fname
はプロシージャの名前、object_schema
は監査対象の表のスキーマの名前、object_name
は監査対象の表の名前、policy_name
は施行するポリシーの名前を表しています。監査ファンクションは、このファンクションの所有者の権限で実行されます。
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_trailにDBが含まれている場合、監査レコードはデータベース内のSYS.FGA_LOG$
表に書き込まれます。
audit_trailにEXTENDED
が含まれている場合、監査証跡には、問合せのSQL TextおよびSQL Bind変数情報が含まれます。
次に例を示します。
audit_trail
をDBMS_FGA.DB
に設定すると、監査証跡は、データベース内のSYS.FGA_LOG$
表に送信され、SQL TextおよびSQL Bindは省略されます。
audit_trail
をDBMS_FGA.DB + DBMS_FGA.EXTENDED
に設定すると、監査証跡は、データベース内のSYS.FGA_LOG$
表に送信され、SQL TextおよびSQL Bindが含まれます。
audit_trail
をDBMS_FGA.XML
に設定すると、監査証跡は、オペレーティング・システムに送信されるXMLファイルに書き込まれ、SQL TextおよびSQL Bindは省略されます。
audit_trail
をDBMS_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.xml
、s002_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_opts
をDBMS_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
を持つファイルに格納されるため、動的ビューでは、次のスキーマを使用して、すべてのプラットフォーム上で同じように監査情報が表示されます。
表54-3 V$XML_AUDIT_TRAIL動的ビューの要素
要素 | 型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用上の注意
すべての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
によって指定されたディレクトリに空きがない場合など)、監査操作は失敗します。アラート・メッセージがロギングされます。
ポリシーのイベント・ハンドラ・モジュールは、モジュールの所有者の権限で実行されます。
例
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);
このプロシージャは、監査方針を無効化します。
構文
DBMS_FGA.DISABLE_POLICY( object_schema VARCHAR2, object_name VARCHAR2, policy_name VARCHAR2 );
パラメータ
表54-4 DISABLE_POLICYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。( |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 |
object_schema
のデフォルト値はNULL
です。(NULL
の場合、現行のログオン・ユーザーのスキーマと想定されます。)
例
DBMS_FGA.DISABLE_POLICY ( object_schema => 'scott', object_name => 'emp', policy_name => 'mypolicy1');
このプロシージャは、監査方針を削除します。
構文
DBMS_FGA.DROP_POLICY(
object_schema VARCHAR2,
object_name VARCHAR2,
policy_name VARCHAR2 );
パラメータ
表54-5 DROP_POLICYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。( |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 |
使用上の注意
DBMS_FGA
プロシージャは、現行のDMLトランザクションがある場合、それらがDDLイベント・トリガーの内部にないかぎり、操作前にコミットします。 DDLトランザクションでは、DBMS_FGA
プロシージャはDDLトランザクションの一部となります。 object_schemaのデフォルト値はNULL
です。(NULL
の場合、現行のログオン・ユーザーのスキーマと想定されます。)
例
DBMS_FGA.DROP_POLICY ( object_schema => 'scott', object_name => 'emp', policy_name => 'mypolicy1');
このプロシージャは、監査方針を有効化します。
構文
DBMS_FGA.ENABLE_POLICY(
object_schema VARCHAR2,
object_name VARCHAR2,
policy_name VARCHAR2,
enable BOOLEAN);
パラメータ
表54-6 ENABLE_POLICYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
監査するオブジェクトのスキーマ。( |
|
監査するオブジェクトの名前。 |
|
ポリシーの一意の名前。 |
|
|
例
DBMS_FGA.ENABLE_POLICY ( object_schema => 'scott', object_name => 'emp', policy_name => 'mypolicy1', enable => TRUE);