この項では、従来型監査のAUDIT文について説明します。 これは、Oracle Database 12cより前のリリースで使用されていた監査機能と同じものです。
Oracle Database 12cから、高度な監査機能を完備した統合監査が導入されました。下位互換性を確保するために、従来型監査も引き続きサポートされています。ただし、既存の監査設定から新しい統合監査ポリシー構文への移行を計画することをお薦めします。新しい監査要件については、新しい統合監査を使用してください。従来型監査は、将来のメジャー・リリースでサポート対象外になる可能性があります。
用途
後続のユーザー・セッションでのSQL文の発行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の発行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。
特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。
前提条件
SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。ただし、IN SESSION CURRENT句を使用する場合はAUDIT SYSTEMシステム権限は必要ありません。
監査結果を収集するには、初期化パラメータAUDIT_TRAILをデフォルトの設定であるNONE以外の値に設定して、監査を有効にする必要があります。監査オプションは、監査が使用可能であるかどうかにかかわらず指定できます。ただし、監査を有効にしないと、監査レコードは作成されません。
スキーマ・オブジェクト操作を監査するためには、監査対象のオブジェクトが自分のスキーマにある必要があります。自分のスキーマにない場合は、AUDIT ANYシステム権限が必要です。また、監査の対象とするオブジェクトがディレクトリ・オブジェクトの場合は、それが自分で作成したものであっても、AUDIT ANYシステム権限が必要です。
マルチテナント・コンテナ・データベース(CDB)に接続している場合、この項で説明されている権限(現在のコンテナでローカルに付与されているか共通に付与されているいずれかの権限)が必要です。
CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。
| 関連項目:AUDIT_TRAILパラメータの詳細は、『Oracle Databaseリファレンス』 を参照してください。 | 
構文
audit::=





セマンティクス
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を省略すると、各PDBのすべてのローカル・ユーザーおよびすべての共通ユーザーが監査されます。audit_schema_object_clauseを指定する場合、オブジェクトはルートまたは共通オブジェクトのローカル・オブジェクトにする必要があります。
audit_operation_clause
audit_operation_clauseを使用すると、操作の影響を受けるスキーマ・オブジェクトに関係なく、指定された操作を監査できます。
sql_statement_shortcut
ショートカットを指定すると、特定のSQL文の使用を監査できます。表13-1および表13-2に、ショートカットおよびそれらが監査するSQL文を示します。
| 注意:SQL文ショートカットとシステム権限を混同しないでください。次に例を示します。 
 | 
監査されるたびに、次の情報を持つ監査レコードが生成されます。
操作を行ったユーザー
操作の種類
操作に関連するオブジェクト
操作の日付と時刻
監査レコードは、監査証跡に書き込まれます。監査証跡とは、監査レコードが入っているデータベースの表です。データ・ディクショナリ・ビューを問い合せて監査証跡を調べることによって、データベース・アクティビティを再検討できます。
| 関連項目: 
 | 
system_privilege
システム権限を指定すると、そのシステム権限で許可されているSQL文およびその他の操作を監査できます。
| 注意: ANYキーワードを含むシステム権限の使用の監査は、ANYキーワードを含まない同じ権限の使用の監査より限定的です。次に例を示します。
 | 
多くの個々のシステム権限を指定するのではなく、ロールCONNECT、RESOURCEおよびDBAを指定できます。これは、そのロールに付与されているすべてのシステム権限を監査することと同じです。
Oracle Databaseには、システム権限と文オプションをまとめて指定するための、次の3つのショートカットが用意されています。
ALL ALLを指定すると、表13-1のすべての文オプションを監査できます。ただし、表13-2の追加文オプションは監査しません。
ALL STATEMENTS ALL STATEMENTSを指定すると、実行されるすべてのトップレベルSQL文を監査できます。トップレベルSQL文は、ユーザーによって直接発行される文です。PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルの文とはみなされません。そのため、この句では、PL/SQLプロシージャ内またはファンクション内から実行される文は監査されません。ただし、PL/SQLプロシージャまたはファンクション自体の実行は監査されます。この句は、システム全体またはユーザー固有の他の監査構成に関係なく、特定の環境内の文をすべて監査する場合に有効です。
ALL PRIVILEGES ALL PRIVILEGESを指定すると、システム権限を監査できます。
| 注意:ロールまたはショートカットでなく、監査に個々のシステム権限および文オプションを指定することをお薦めします。ロールおよびショートカットに含まれるシステム権限および文オプションは、リリースごとに異なり、Oracle Databaseの今後のバージョンでサポートされない場合があります。 | 
| 関連項目: 
 | 
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操作を指定します。表13-3に、監査できるオブジェクトのタイプ、およびオブジェクトごとに監査できるSQL文を示します。たとえば、ALTER操作を指定して表の監査を選択した場合、その表に対して発行されるALTER TABLE文がすべて監査されます。また、SELECT操作を指定して順序の監査を選択した場合、その順序の値を使用するすべての文が監査されます。
ALL
ALLをショートカットに指定することは、オブジェクト・タイプに適用できるSQL操作をすべて指定することと同じです。
auditing_on_clause
auditing_on_clauseを使用すると、監査する特定のスキーマ・オブジェクトを指定できます。
schema 監査の対象として選択されたオブジェクトが定義されているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。
object 監査するオブジェクトの名前を指定します。オブジェクトは、表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、マイニング・モデルまたはライブラリのいずれかである必要があります。
表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型については、それぞれシノニムも指定できます。
ON DIRECTORY  ON DIRECTORY句を使用すると、監査するディレクトリ名を指定できます。
ON MINING MODEL  ON MINING MODEL句を使用すると、監査するマイニング・モデル名を指定できます。
ON SQL TRANSLATION PROFILE句を使用すると、監査対象にするSQL翻訳プロファイルを指定できます。
ON DEFAULT  ON DEFAULTを指定すると、それ以降に作成したオブジェクトのデフォルト・オブジェクト・オプションとして使用する、指定のオブジェクト・オプションを作成できます。デフォルトの監査オプションが確立されると、その後作成されるオブジェクトに対して、これらのオプションが自動的に適用され、監査が行われます。ビューに対するデフォルト監査オプションは、常に、そのビューの実表に対する監査オプションの論理和となります。ALL_DEF_AUDIT_OPTSデータ・ディクショナリ・ビューを問い合せることによって、現在のデフォルト監査オプションを表示できます。
デフォルト監査オプションを変更した場合でも、以前作成したオブジェクトの監査オプションはそのまま残ります。AUDIT文のON句にオブジェクトを指定した場合のみ、既存のオブジェクトの監査オプションを変更できます。
この句を使用すると、ネットワーク・レイヤーの内部的な障害を検出できます。
| 関連項目:ネットワーク監査の詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。 | 
DIRECT_PATH LOAD
この句を使用すると、SQL*Loaderのダイレクト・パス・ロードを監査できます。
以前のリリースでは、BY SESSIONを指定すると、データベースによって、同一セッションの同一スキーマ・オブジェクトで実行された同じ種類のすべてのSQL文または操作に対して1つのレコードが書き込まれました。このリリースのOracle Databaseからは、BY SESSIONおよびBY ACCESSを指定すると、監査された文および操作ごとに1つの監査レコードが書き込まれます。BY ACCESSと比較すると、BY SESSIONでは引き続き異なる値が監査証跡に移入されます。すべてのAUDIT文にBY ACCESS句を指定し、より詳細な監査レコードを書き込むことをお薦めします。どちらの句も指定しない場合は、BY ACCESSがデフォルトになります。
| 注意:この句は、データ定義言語(DDL)文以外のSQL文を監査するスキーマ・オブジェクト監査オプション、文オプションおよびシステム権限にのみ適用されます。DDL文を監査するすべての BYACCESSSQL文およびシステム権限は、データベースによって常に監査されます。 | 
BY ACCESSを指定すると、監査された各文および操作について、1つのレコードを書き込むことができます。
| 注意:データ定義言語(DDL)文を監査するSQL文ショートカットまたはシステム権限を指定した場合は、常にアクセスごとに監査されます。それ以外のすべての場合、データベースは BYSESSIONまたはBYACCESSの指定に従います。 | 
DDL文以外のSQL文を監査する文オプションとシステム権限には、BY SESSIONまたはBY ACCESSのいずれかを指定できます。BY ACCESSがデフォルトです。
WHENEVER SUCCESSFULを指定すると、正常に実行されたSQL文および操作のみを監査できます。
WHENEVER NOT SUCCESSFULを指定すると、失敗またはエラーが発生したSQL文および操作のみを監査できます。
この句を指定しない場合、処理結果にかかわらず監査が行われます。
CONTAINER句
CONTAINER句は、CDBに接続している場合にのみ適用されます。この句を使用すると、AUDIT文の有効範囲を指定できます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。
現在のコンテナがPDBであるときにAUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER = CURRENTを指定できます。
現在のコンテナがルートであるときにAUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER = ALLを指定できます。
監査オプションの表
表13-1 監査のSQL文ショートカット
| SQL文ショートカット | 監査済のSQL文と操作 | 
|---|---|
| 
 | 
 | 
| 
 | 
 
 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 指定したオブジェクトが存在しない場合に失敗するすべてのSQL文。 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 
 
 
 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 | 
| 
 | Logons | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 | 
| 
 | 
 
 
 
 
 
 
 | 
| 
 | 
 
 
 
 
 | 
| 
 | 
 
 
 注意: 
 | 
| 
 | 
 
 | 
| 注意:Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、SQL文の監査ではプロシージャと同じであるとみなされます。 | 
| SQL文ショートカット | 監査済のSQL文と操作 | 
|---|---|
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 
 | 
| 
 | 
 | 
| 
 | 
 プロシージャやファンクションの実行、またはパッケージ内の変数、ライブラリまたはカーソルへのアクセス。 | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
表13-3 スキーマ・オブジェクト監査オプション
| オブジェクト | SQL操作 | 
|---|---|
| 表 | ALTERAUDITCOMMENTDELETEFLASHBACK(注意1)GRANTINDEXINSERTLOCKRENAMESELECTUPDATE | 
| ビュー | AUDITCOMMENTDELETEFLASHBACK(注意1)GRANTINSERTLOCKRENAMESELECTUPDATE | 
| 順序 | ALTERAUDITGRANTSELECT | 
| プロシージャ、ファンクション、パッケージ(注意2) | AUDITEXECUTE(注意3および4)GRANT | 
| マテリアライズド・ビュー(注意5) | ALTERAUDITCOMMENTDELETEINDEXINSERTLOCKSELECTUPDATE | 
| マイニング・モデル | AUDITCOMMENTGRANTRENAMESELECT | 
| ディレクトリ | AUDITGRANTREAD | 
| ライブラリ | EXECUTEGRANT | 
| オブジェクト型 | ALTERAUDITGRANT | 
注意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;
表の問合せの監査例: 次の文は、スキーマ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ショートカットを使用しています。
ALTER SEQUENCE
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文の監査オプションが自動的に構成されます。