AUDIT (従来型監査)
ノート:
従来型の監査は、Oracle Database 20cでは非推奨です。Oracle Database内で選択的かつより効果的な監査が可能になる統合監査を使用することをお薦めします。
この項では、従来型監査のAUDIT文について説明します。 これは、Oracle Database 12cより前のリリースで使用されていた監査機能と同じものです。
Oracle Database 12cから、高度な監査機能を完備した統合監査が導入されました。下位互換性を確保するために、従来型監査も引き続きサポートされています。ただし、既存の監査設定から新しい統合監査ポリシー構文への移行を計画することをお薦めします。新しい監査要件については、新しい統合監査を使用してください。従来型監査は、将来のメジャー・リリースでサポート対象外になる可能性があります。
関連項目:
統合監査用のAUDIT文の詳細は、「AUDIT (統合監査)」を参照してください。
目的
-
後続のユーザー・セッションでのSQL文の発行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の発行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。
-
特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。
関連項目:
-
値に基づいた監査方針を作成および管理する
DBMS_FGAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
前提条件
SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。ただし、IN SESSION CURRENT句を使用する場合はAUDIT SYSTEMシステム権限は必要ありません。
監査結果を収集するには、初期化パラメータAUDIT_TRAILをデフォルトの設定であるNONE以外の値に設定して、監査を有効にする必要があります。監査オプションは、監査が使用可能であるかどうかにかかわらず指定できます。ただし、監査を有効にしないと、監査レコードは作成されません。
スキーマ・オブジェクト操作を監査するためには、監査対象のオブジェクトが自分のスキーマにある必要があります。自分のスキーマにない場合は、AUDIT ANYシステム権限が必要です。また、監査の対象とするオブジェクトがディレクトリ・オブジェクトの場合は、それが自分で作成したものであっても、AUDIT ANYシステム権限が必要です。
マルチテナント・コンテナ・データベース(CDB)に接続している場合、この項で説明されている権限(現在のコンテナでローカルに付与されているか共通に付与されているいずれかの権限)が必要です。
CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。
CDBでのAUDIT文の使用についてのノート
CDBでAUDIT文を発行すると、データベースは次のように監査を実行します。
-
現在のコンテナがPDBの場合に
AUDIT文を発行すると、データベースはそのPDBで監査を実行します。auditing_by_clauseを指定する場合、userは、PDBのローカル・ユーザーまたは共通ユーザーにする必要があります。audit_schema_object_clauseを指定する場合、オブジェクトはPDBのローカル・オブジェクトにする必要があります。 -
現在のコンテナがルートの場合に
AUDIT文を発行すると、データベースはCDB全体つまりルートおよびすべてのPDBで監査を実行します。auditing_by_clauseを指定する場合、userは、共通ユーザーにする必要があります。auditing_by_clauseを省略すると、すべての共通ユーザーが監査されます。audit_schema_object_clauseを指定する場合、オブジェクトはルートまたは共通オブジェクトのローカル・オブジェクトにする必要があります。
関連項目:
AUDIT_TRAILパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
構文
audit::=
audit_schema_object_clause::=
セマンティクス
audit_operation_clause
audit_operation_clauseを使用すると、操作の影響を受けるスキーマ・オブジェクトに関係なく、指定された操作を監査できます。
sql_statement_shortcut
ショートカットを指定すると、特定のSQL文の使用を監査できます。表12-1および表12-2に、ショートカットとその監査対象となるSQL文を示します。
ノート:
SQL文ショートカットとシステム権限を混同しないでください。次に例を示します。
-
AUDITUSER文は、SQLのCREATEUSER、ALTERUSERおよびDROPUSER文のすべてを監査するUSERショートカットを指定します。この場合の監査には、ユーザーがALTERUSER文で自分のパスワードを変更する操作が含まれています。 -
AUDITALTERUSER文では、ALTERUSERシステム権限を指定して、そのシステム権限を使用するすべての操作を監査できるようにします。この場合の監査には、ユーザーが自分のパスワードを変更する操作は含まれません。これは、その操作には、ALTERUSERシステム権限は必要ないためです。
監査されるたびに、次の情報を持つ監査レコードが生成されます。
-
操作を行ったユーザー
-
操作の種類
-
操作に関連するオブジェクト
-
操作の日付と時刻
監査レコードは、監査証跡に書き込まれます。監査証跡とは、監査レコードが入っているデータベースの表です。データ・ディクショナリ・ビューを問い合せて監査証跡を調べることによって、データベース・アクティビティを再検討できます。
関連項目:
-
監査証跡データ・ディクショナリ・ビューのリストの詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。
-
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
-
「ロールに関連するSQL文の監査: 例」を参照してください。
system_privilege
システム権限を指定すると、そのシステム権限で許可されているSQL文およびその他の操作を監査できます。
ノート:
ANYキーワードを含むシステム権限の使用の監査は、ANYキーワードを含まない同じ権限の使用の監査より限定的です。次に例を示します。
-
AUDITCREATEPROCEDUREは、CREATEPROCEDUREまたはCREATEANYPROCEDURE権限を使用して発行された文を監査します。 -
AUDITCREATEANYPROCEDUREは、CREATEANYPROCEDURE権限を使用して発行された文のみを監査します。
多くの個々のシステム権限を指定するのではなく、ロールCONNECT、RESOURCEおよびDBAを指定できます。これは、そのロールに付与されているすべてのシステム権限を監査することと同じです。
Oracle Databaseには、システム権限と文オプションをまとめて指定するための、次の3つのショートカットが用意されています。
ALL
ALLを指定すると、表12-1のすべての文オプションを監査できます。ただし、表12-2の追加文オプションは監査しません。
ALL STATEMENTS
ALL STATEMENTSを指定すると、実行されるすべてのトップレベルSQL文を監査できます。トップレベルSQL文は、ユーザーによって直接発行される文です。PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルの文とはみなされません。そのため、この句では、PL/SQLプロシージャ内またはファンクション内から実行される文は監査されません。ただし、PL/SQLプロシージャまたはファンクション自体の実行は監査されます。この句は、システム全体またはユーザー固有の他の監査構成に関係なく、特定の環境内の文をすべて監査する場合に有効です。
ALL PRIVILEGES
ALL PRIVILEGESを指定すると、システム権限を監査できます。
ノート:
ロールまたはショートカットでなく、監査に個々のシステム権限および文オプションを指定することをお薦めします。ロールおよびショートカットに含まれるシステム権限および文オプションは、リリースごとに異なり、Oracle Databaseの今後のバージョンでサポートされない場合があります。
関連項目:
-
すべてのシステム権限とそれによって許可される操作のリストは、表18-1を参照してください。
-
CONNECT、RESOURCEおよびDBAロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。 -
「問合せおよび更新を行うSQL文の監査: 例」、「削除の監査: 例」および「ディレクトリに関連する文の監査: 例」を参照してください。
auditing_by_clause
auditing_by_clauseを指定すると、特定のユーザーによって発行されたSQL文のみを監査するように制限できます。この句を指定しない場合、すべてのユーザー文が監査されます。
IN SESSION CURRENT
この句を使用すると、監査を現行のセッションに制限できます。監査はセッションが終了するまで続行し、NOAUDIT文を使用して停止することはできません。
audit_schema_object_clause
audit_schema_object_clauseを使用すると、特定のスキーマ・オブジェクトの操作を監査できます。
audit_schema_object_clauseの制限事項
CDBに接続する場合、audit_schema_object_clauseを指定できますが、CONTAINER句は指定できません。この制限事項は、CONTAINER句で使用できる値がデフォルト値のみのため、機能を制限することはありません。詳細は、「CONTAINER句」を参照してください。
sql_operation
監査するSQL操作を指定します。表12-3に、監査可能なオブジェクトのタイプおよびオブジェクトごとの監査可能なSQL文を示します。たとえば、ALTER操作を指定して表の監査を選択した場合、その表に対して発行されるALTER TABLE文がすべて監査されます。また、SELECT操作を指定して順序の監査を選択した場合、その順序の値を使用するすべての文が監査されます。
ALL
ALLをショートカットに指定することは、オブジェクト・タイプに適用できるSQL操作をすべて指定することと同じです。
auditing_on_clause
auditing_on_clauseを使用すると、監査する特定のスキーマ・オブジェクトを指定できます。
関連項目:
「表の問合せの監査: 例」、「表の挿入および更新の監査: 例」および「順序の操作の監査: 例」を参照してください。
schema
監査の対象として選択したオブジェクトが含まれているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。
object
監査するオブジェクトの名前を指定します。オブジェクトは、表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、ストアド・パッケージ、マテリアライズド・ビュー、マイニング・モデルまたはライブラリのいずれかである必要があります。
表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型については、それぞれシノニムも指定できます。
ON DEFAULTを指定すると、指定したオブジェクト・オプションが、それ以降に作成するオブジェクトのデフォルト・オブジェクト・オプションになります。デフォルトの監査オプションが確立されると、その後作成されるオブジェクトに対して、これらのオプションが自動的に適用され、監査が行われます。ビューに対するデフォルト監査オプションは、常に、そのビューの実表に対する監査オプションの論理和となります。ALL_DEF_AUDIT_OPTSデータ・ディクショナリ・ビューを問い合せることによって、現在のデフォルト監査オプションを表示できます。
デフォルト監査オプションを変更した場合でも、以前作成したオブジェクトの監査オプションはそのまま残ります。AUDIT文のON句にオブジェクトを指定した場合のみ、既存のオブジェクトの監査オプションを変更できます。
関連項目:
ON DIRECTORY句を使用すると、監査するディレクトリ名を指定できます。
ON MINING MODEL句を使用すると、監査するマイニング・モデル名を指定できます。
ON SQL TRANSLATION PROFILE句を使用すると、監査対象にするSQL翻訳プロファイルを指定できます。
NETWORK
この句を使用すると、ネットワーク・レイヤーの内部的な障害を検出できます。
関連項目:
ネットワーク監査の詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。
DIRECT_PATH LOAD
この句を使用すると、SQL*Loaderのダイレクト・パス・ロードを監査できます。
BY SESSION
以前のリリースでは、BY SESSIONを指定すると、データベースによって、同一セッションの同一スキーマ・オブジェクトで実行された同じ種類のすべてのSQL文または操作に対して1つのレコードが書き込まれました。このリリースのOracle Databaseからは、BY SESSIONおよびBY ACCESSを指定すると、監査された文および操作ごとに1つの監査レコードが書き込まれます。BY ACCESSと比較すると、BY SESSIONでは引き続き異なる値が監査証跡に移入されます。すべてのAUDIT文にBY ACCESS句を指定し、より詳細な監査レコードを書き込むことをお薦めします。どちらの句も指定しない場合は、BY ACCESSがデフォルトになります。
ノート:
この句は、データ定義言語(DDL)文以外のSQL文を監査するスキーマ・オブジェクト監査オプション、文オプションおよびシステム権限にのみ適用されます。DDL文を監査するすべてのBY ACCESS SQL文およびシステム権限は、データベースによって常に監査されます。
BY ACCESS
BY ACCESSを指定すると、監査された各文および操作について、1つのレコードを書き込むことができます。
ノート:
データ定義言語(DDL)文を監査するSQL文ショートカットまたはシステム権限を指定した場合は、常にアクセスごとに監査されます。それ以外のすべての場合、データベースはBY SESSIONまたはBY ACCESSの指定に従います。
DDL文以外のSQL文を監査する文オプションとシステム権限には、BY SESSIONまたはBY ACCESSのいずれかを指定できます。BY ACCESSがデフォルトです。
WHENEVER [NOT] SUCCESSFUL
WHENEVER SUCCESSFULを指定すると、正常に実行されたSQL文および操作のみを監査できます。
WHENEVER NOT SUCCESSFULを指定すると、失敗またはエラーが発生したSQL文および操作のみを監査できます。
この句を指定しない場合、処理結果にかかわらず監査が行われます。
CONTAINER句
CONTAINER句は、CDBに接続している場合にのみ適用されます。この句を使用すると、AUDIT文の有効範囲を指定できます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。
- 現在のコンテナがPDBであるときに
AUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER=CURRENTを指定できます。 -
現在のコンテナがルートであるときに
AUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER=ALLを指定できます。
監査オプションの表
表12-1 監査のSQL文ショートカット
| SQL文ショートカット | 監査済のSQL文と操作 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
指定したオブジェクトが存在しない場合に失敗するすべてのSQL文。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ログオン |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
および |
|
|
|
|
|
ノート:
|
|
|
|
ノート:
Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、SQL文の監査ではプロシージャと同じであるとみなされます。
表12-2 監査のその他のSQL文ショートカット
| SQL文ショートカット | 監査済のSQL文と操作 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ディレクトリでのプログラムの実行 |
|
|
プロシージャやファンクションの実行、またはパッケージ内の変数、ライブラリまたはカーソルへのアクセス。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ディレクトリでの読取り操作 |
|
|
|
|
|
|
|
|
|
|
|
ディレクトリでの書込み操作 |
表12-3 スキーマ・オブジェクト監査オプション
| オブジェクト | SQL操作 |
|---|---|
|
表 |
|
|
ビュー |
|
|
順序 |
|
|
プロシージャ、ファンクション、パッケージ(ノート2) |
|
|
マテリアライズド・ビュー(ノート5) |
|
|
マイニング・モデル |
|
|
ディレクトリ |
|
|
ライブラリ |
|
|
オブジェクト型 |
|
ノート1: FLASHBACK監査オブジェクト・オプションは、フラッシュバック問合せに対してのみ適用されます。
ノート2: Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、監査オプションではプロシージャ、ファンクションおよびパッケージと同じであるとみなされます。
ノート3: PL/SQLストアド・プロシージャまたはストアド・ファンクションに対するEXECUTE操作を監査する場合は、監査目的での操作の成否を判断する際に、プロシージャまたはファンクションが見つかるか、およびその実行を認証できるかどうかのみが考慮されます。したがって、WHENEVER NOT SUCCESSFUL句を指定すると、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。プロシージャまたはファンクションの実行時に検出されたエラーは監査されません。WHENEVER SUCCESSFUL句を指定すると、実行時にエラーが検出されたかどうかに関係なく、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。
ノート4: PL/SQLストアド・プロシージャまたはストアド・ファンクション内の再帰的なSQL操作の失敗を監査するには、SQL操作の監査を構成します。
ノート5: INSERT、UPDATEおよびDELETE操作の監査は、更新可能なマテリアライズド・ビューに対してのみ可能です。
例
ロールに関連するSQL文の監査: 例
次の文は、ロールの作成、変更、削除または設定を行う各SQL文が正常に終了したかどうかにかかわらず、それらの文について監査を行います。
AUDIT ROLE;
次の文は、ロールの作成、変更、削除または設定を行う、正常に終了したSQL文ごとに監査を行います。
AUDIT ROLE
WHENEVER SUCCESSFUL;
次の文は、Oracle Databaseエラーが発生したCREATE ROLE文、ALTER ROLE文、DROP ROLE文またはSET ROLE文について監査を行います。
AUDIT ROLE
WHENEVER NOT SUCCESSFUL; 問合せおよび更新を行うSQL文の監査: 例
次の文は、任意の表について問合せまたは更新を行う任意の文について監査を行います。
AUDIT SELECT TABLE, UPDATE TABLE;
次の文は、ユーザーhrおよびoeが発行する、表やビューの問合せまたは更新を実行する文について監査を行います。
AUDIT SELECT TABLE, UPDATE TABLE
BY hr, oe; 削除の監査: 例
次の文は、DELETE ANY TABLEシステム権限を使用して発行された文について監査を行います。
AUDIT DELETE ANY TABLE;
ディレクトリに関連する文の監査: 例
次の文は、CREATE ANY DIRECTORYシステム権限を使用して発行された文について監査を行います。
AUDIT CREATE ANY DIRECTORY;
CREATE ANY DIRECTORYシステム権限を使用しないCREATE DIRECTORY(およびDROP DIRECTORY)文を監査する場合は、次の文を発行します。
AUDIT DIRECTORY;
次の文は、bfile_dirディレクトリからファイルを読み込む各文について監査を行います。
AUDIT READ ON DIRECTORY bfile_dir;
次の文は、任意のディレクトリからファイルを読み込む各文について監査を行います。
AUDIT READ DIRECTORY;
表の問合せの監査: 例
次の文は、スキーマhr内のemployees表を問い合せる各SQL文について監査を行います。
AUDIT SELECT
ON hr.employees;
次の文は、スキーマhr内のemployees表を問い合せて正常に終了した各文について監査を行います。
AUDIT SELECT
ON hr.employees
WHENEVER SUCCESSFUL;
次の文は、スキーマhr内のemployees表を問い合せてOracle Databaseエラーが発生した各文について監査を行います。
AUDIT SELECT
ON hr.employees
WHENEVER NOT SUCCESSFUL; 表の挿入および更新の監査: 例
次の文は、スキーマoe内のcustomers表内の行を挿入または更新する各文について監査を行います。
AUDIT INSERT, UPDATE
ON oe.customers; 順序の操作の監査: 例
次の文は、スキーマhr内のemployees_seq順序に対する操作を行う各文について監査を行います。
AUDIT ALL
ON hr.employees_seq;
この文では、順序に対して操作を行う次の文について監査を行うため、ALLショートカットを使用しています。
-
ALTERSEQUENCE -
AUDIT -
GRANT -
疑似列
CURRVALまたはNEXTVALを使用して、順序の値にアクセスするすべての文
デフォルト監査オプションの設定: 例
次の文は、将来作成されるオブジェクトについてデフォルト監査オプションを指定します。
AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE
ON DEFAULT;
以降に作成されるオブジェクトは、指定したオプションによって自動的に監査用に構成されます。
-
表を作成した場合、その表に対して発行される
ALTER文、GRANT文、INSERT文、UPDATE文またはDELETE文の監査オプションが自動的に構成されます。 -
ビューを作成した場合、そのビューに対する
GRANT文、INSERT文、UPDATE文またはDELETE文の監査オプションが自動的に構成されます。 -
順序を作成した場合、その順序に対する
ALTER文またはGRANT文の監査オプションが自動的に構成されます。 -
プロシージャ、パッケージまたはファンクションを作成した場合、それらに対する
ALTER文またはGRANT文の監査オプションが自動的に構成されます。




