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文ショートカットとシステム権限を混同しないでください。次に例を示します。
-
AUDIT
USER
文は、SQLのCREATE
USER、ALTER
USER
およびDROP
USER
文のすべてを監査するUSER
ショートカット
を指定します。この場合の監査には、ユーザーがALTER
USER
文で自分のパスワードを変更する操作が含まれています。 -
AUDIT
ALTER
USER
文では、ALTER
USER
システム権限を指定して、そのシステム権限を使用するすべての操作を監査できるようにします。この場合の監査には、ユーザーが自分のパスワードを変更する操作は含まれません。これは、その操作には、ALTER
USER
システム権限は必要ないためです。
監査されるたびに、次の情報を持つ監査レコードが生成されます。
-
操作を行ったユーザー
-
操作の種類
-
操作に関連するオブジェクト
-
操作の日付と時刻
監査レコードは、監査証跡に書き込まれます。監査証跡とは、監査レコードが入っているデータベースの表です。データ・ディクショナリ・ビューを問い合せて監査証跡を調べることによって、データベース・アクティビティを再検討できます。
関連項目:
-
監査証跡データ・ディクショナリ・ビューのリストの詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。
-
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
-
「ロールに関連するSQL文の監査: 例」を参照してください。
system_privilege
システム権限を指定すると、そのシステム権限で許可されているSQL文およびその他の操作を監査できます。
ノート:
ANY
キーワードを含むシステム権限の使用の監査は、ANY
キーワードを含まない同じ権限の使用の監査より限定的です。次に例を示します。
-
AUDIT
CREATE
PROCEDURE
は、CREATE
PROCEDURE
またはCREATE
ANY
PROCEDURE
権限を使用して発行された文を監査します。 -
AUDIT
CREATE
ANY
PROCEDURE
は、CREATE
ANY
PROCEDURE
権限を使用して発行された文のみを監査します。
多くの個々のシステム権限を指定するのではなく、ロール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
ショートカットを使用しています。
-
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
文の監査オプションが自動的に構成されます。