AUDIT (統合監査)
この項では、統合監査のAUDIT
文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
目的
AUDIT
文は、次の目的に使用します。
-
すべてのユーザーまたは特定のユーザーに対する統合監査ポリシーを有効にする。
-
監査対象イベントが失敗または成功(または、その両方)した場合に、監査レコードを作成するかどうかを指定する。
-
アプリケーション・コンテキスト属性を指定する(属性値が監査レコードに記録されます)。
監査ポリシーに加えられた変更は、現在のセッションおよびすべてのアクティブ・セッションで、再ログインなしで即座に有効になります。
前提条件
AUDIT
SYSTEM
システム権限、またはAUDIT_ADMIN
ロールが必要になります。
マルチテナント・コンテナ・データベース(CDB)に接続している場合、共通の統合監査ポリシーを有効にするには、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT
SYSTEM
権限またはAUDIT_ADMIN
共通ロールが必要です。ローカルの統合監査ポリシーを有効にするには、現在のコンテナが、その監査ポリシーが作成されたコンテナである必要があります。また、共通に付与されているAUDIT
SYSTEM
権限またはAUDIT_ADMIN
共通ロールを保有しているか、そのコンテナでローカルに付与されているAUDIT
SYSTEM
権限またはAUDIT_ADMIN
ローカル・ロールを保有している必要があります。
CDBに接続しているときにAUDIT
CONTEXT
...文を指定するには、共通に付与されているAUDIT
SYSTEM
権限またはAUDIT_ADMIN
共通ロールを保有しているか、現在のセッションのコンテナでローカルに付与されているAUDIT
SYSTEM
権限またはAUDIT_ADMIN
ローカル・ロールを保有している必要があります。
構文
unified_audit::=
by_users_with_roles::=
セマンティクス
policy
Oracle Databaseリリース21cの統合監査ポリシーは、SQL文を実行する現在のユーザーに強制されます。
有効にする統合監査ポリシーの名前を指定します。(このポリシーは、CREATE
AUDIT
POLICY
文を使用して事前に作成しておく必要があります。)AUDIT
POLICY
文が実行されるとすぐに、ポリシーは現在のセッションおよびアクティブな実行中のセッションに対してアクティブになります。
すべての統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_POLICIES
ビューを問い合わせます。すべての有効な統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_ENABLED_POLICIES
ビューを問い合わせます。
統合監査ポリシーを有効にすると、その有効にしたポリシーで指定されているシステム権限、アクションまたはロールの監査オプションに合致するすべてのSQL文および操作が監査されます。つまり、統合監査レコードがUNIFIED_AUDIT_TRAIL
ビューに作成されます。1つのSQL文または操作が複数の有効なポリシーに合致する場合、統合監査レコードは1つのみ作成され、合致するすべての監査ポリシーの名前がUNIFIED_AUDIT_TRAIL
ビューのUNIFIED_AUDIT_POLICIES
列にカンマ区切りリストで表示されます。
関連項目:
-
AUDIT_UNIFIED_POLICIES
ビュー、AUDIT_UNIFIED_ENABLED_POLICIES
ビューおよびUNIFIED_AUDIT_TRAIL
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
BY | EXCEPT
BY
句を指定すると、指定したユーザーに対してのみpolicy
を有効にできます。
EXCEPT
句を指定すると、指定したユーザーを除くすべてのユーザーに対してpolicy
を有効にできます。
BY
、EXCEPT
およびby_users_with_roles
句を指定しない場合、policy
はすべてのユーザーを対象として有効化されます。
policy
が共通の統合監査ポリシーの場合、user
は共通ユーザーにする必要があります。policy
がローカルの統合監査ポリシーの場合、user
は共通ユーザーまたは接続先のコンテナのローカル・ユーザーにする必要があります。
BY句およびEXCEPT句のノート
BY
句およびEXCEPT
句には、次のノートが適用されます。
-
同じ統合監査ポリシーに対して複数の
AUDIT
...BY
... 文を指定した場合、そのポリシーは各文で指定したユーザーの和集合に対して有効になります。 -
同じ統合監査ポリシーに対して複数の
AUDIT
...EXCEPT
... 文を指定した場合、最後に指定した文のみが作用します。つまり、最後のAUDIT
...EXCEPT
... 文で指定したユーザーを除くすべてのユーザーに対してポリシーが有効になります。 -
BY
句を使用して有効化されたポリシーを、EXCEPT
句を使用して有効にする場合、まずNOAUDIT
...BY
... 文を使用して、そのポリシーが現在有効になっているすべてのユーザーに対してポリシーを無効にしてから、AUDIT
...EXCEPT
... 文でポリシーを有効にする必要があります。 -
EXCEPT
句を使用して有効化されてたポリシーを、BY
句を使用して有効にする場合、まずNOAUDIT
文を使用してその監査ポリシーを無効にする必要があります。EXCEPT
句はNOAUDIT
文では指定できません。次に、AUDIT
...BY
... 文でポリシーを有効にします。
BY句およびEXCEPT句の制限事項
同じ統合監査ポリシーに、AUDIT
... BY
...文およびAUDIT
... EXCEPT
...文を指定することはできません。指定すると、エラーが発生します。
by_users_with_roles
この句を指定すると、指定したロールを直接的または間接的に付与されたユーザーに対してpolicy
を有効化できます。その後、いずれかのロールを追加のユーザー、またはユーザーに直接的または間接的に付与されたロールに付与すると、ポリシーはそのユーザーに自動的に適用されます。その後、いずれかのロールをユーザーまたはロール(ロールまたはユーザーに直接的または間接的に付与されたロール)から取り消した場合、ポリシーはそのユーザーに適用されなくなります。
CDBに接続されているときに、policy
が共通の統合監査ポリシーである場合、role
は共通ロールである必要があります。policy
がローカルの統合監査ポリシーの場合、role
は共通ロールまたは接続先のコンテナ内のローカル・ロールにする必要があります。
ロールに対するローカル監査ポリシーの有効化
ローカル監査ポリシーは、ローカル・ロールおよび共通ロールに対して有効にできます。ローカル監査ポリシーが共通ロールに対して有効になっている場合、共通ロールがユーザーにコンテナ内でローカルまたは共通に付与されると、監査レコードが生成されます。
ロールに対する共通監査ポリシーの有効化
共通監査ポリシーは、共通ロールに対してのみ有効化できます。共通監査ポリシーが共通ロールに対して有効になっている場合、共通ロールがユーザーにルート・コンテナ内で共通またはローカルに付与されると、監査レコードが生成されます。
WHENEVER [NOT] SUCCESSFUL
WHENEVER
SUCCESSFUL
を指定すると、正常に実行されたSQL文および操作のみを監査できます。
WHENEVER
NOT
SUCCESSFUL
を指定すると、失敗またはエラーが発生したSQL文および操作のみを監査できます。
この句を指定しない場合、処理結果にかかわらず監査が行われます。
CONTEXT句
CONTEXT
句を指定すると、監査レコードにコンテキスト属性の値を含めることができます。
-
namespace
には、コンテキスト・ネームスペースを指定します。 -
attribute
には、監査レコードに含める値を持つ1つ以上のコンテキスト属性を指定します。 -
オプションの
BY
user
句を使用すると、指定したユーザーが実行したイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。BY
句を省略すると、コンテキスト属性の値がすべての監査レコードに含まれるようになります。
現在のコンテナがCDBのルートであるときにCONTEXT
句を指定すると、ルートで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY
句を指定する場合、user
は共通ユーザーにする必要があります。
現在のコンテナがプラガブル・データベース(PDB)であるときにCONTEXT
句を指定すると、PDBで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY
句を指定する場合、user
は、共通ユーザーまたはそのPDBのローカル・ユーザーにする必要があります。
監査証跡に取得されるように構成されている、アプリケーション・コンテキストの属性を調べるには、AUDIT_UNIFIED_CONTEXTS
ビューを問い合わます。
関連項目:
AUDIT_UNIFIED_CONTEXTS
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
例
次の例では、CREATE
AUDIT
POLICY
の「例」で作成した統合監査ポリシーを有効にします。
すべてのユーザーを対象とした統合監査ポリシーの有効化: 例
次の文は、統合監査ポリシーtable_pol
をすべてのユーザーに対して有効にします。
AUDIT POLICY table_pol;
次の文は、table_pol
がすべてのユーザーに対して有効になっていることを確認します。
SELECT policy_name, enabled_option, entity_name FROM audit_unified_enabled_policies WHERE policy_name = 'TABLE_POL'; POLICY_NAME ENABLED_OPTION ENTITY_NAME ----------- ----------- --------- TABLE_POL BY ALL USERS
特定のユーザーを対象とした統合監査ポリシーの有効化: 例
次の文は、統合監査ポリシーdml_pol
をユーザーhr
およびsh
に対してのみ有効にします。
AUDIT POLICY dml_pol BY hr, sh;
次の文は、dml_pol
がユーザーhr
とsh
に対してのみ有効になっていることを確認します。
SELECT policy_name, enabled_option, entity_name FROM audit_unified_enabled_policies WHERE policy_name = 'DML_POL' ORDER BY user_name; POLICY_NAME ENABLED_OPTION ENTITY_NAME ----------- ----------- --------- DML_POL BY HR DML_POL BY SH
次の文は、統合監査ポリシーread_dir_pol
をhr
以外のすべてのユーザーに対して有効にします。
AUDIT POLICY read_dir_pol EXCEPT hr;
次の文は、read_dir_pol
がhr
以外のすべてのユーザーに対して有効になっていることを確認します。
SELECT policy_name, enabled_option, entity_name FROM audit_unified_enabled_policies WHERE policy_name = 'READ_DIR_POL'; POLICY_NAME ENABLED_OPTION ENTITY_NAME ------------ ----------- --------- READ_DIR_POL EXCEPT HR
次の文は、統合監査ポリシーsecurity_pol
をユーザーhr
に対して有効にして、失敗したSQL文および操作のみを監査します。
AUDIT POLICY security_pol BY hr WHENEVER NOT SUCCESSFUL;
次の文は、統合監査ポリシーsecurity_pol
がユーザーhr
に対してのみ有効になっており、失敗したSQL文および操作のみが監査対象になることを確認します。
SELECT policy_name, enabled_option, entity_name, success, failure FROM audit_unified_enabled_policies WHERE policy_name = 'SECURITY_POL'; POLICY_NAME ENABLED_OPTION ENTITY_NAME SUCCESS FAILURE ------------ -------------------- ---------- ------- ------- SECURITY_POL BY HR NO YES
監査レコードへのコンテキスト属性値の追加: 例
次の文では、ネームスペースUSERENV
の属性CURRENT_USER
とDB_NAME
の値を、ユーザーhr
についてのすべての監査レコードに含めるようにデータベースに指示します。
AUDIT CONTEXT NAMESPACE userenv ATTRIBUTES current_user, db_name BY hr;