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ローカル・ロールを保有している必要があります。

構文

by_users_with_roles::=

セマンティクス

policy

有効にする統合監査ポリシーの名前を指定します。このポリシーは、CREATE AUDIT POLICY文を使用して作成されている必要があります。

すべての統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_POLICIESビューを問い合わせます。すべての有効な統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_ENABLED_POLICIESビューを問い合わせます。

統合監査ポリシーを有効にすると、その有効にしたポリシーで指定されているシステム権限、アクションまたはロールの監査オプションに合致するすべてのSQL文および操作が監査されます。つまり、統合監査レコードがUNIFIED_AUDIT_TRAILビューに作成されます。1つのSQL文または操作が複数の有効なポリシーに合致する場合、統合監査レコードは1つのみ作成され、合致するすべての監査ポリシーの名前がUNIFIED_AUDIT_TRAILビューのUNIFIED_AUDIT_POLICIES列にカンマ区切りリストで表示されます。

関連項目:

BY | EXCEPT

BY句を指定すると、指定したユーザーに対してのみpolicyを有効にできます。

EXCEPT句を指定すると、指定したユーザーを除くすべてのユーザーに対してpolicyを有効にできます。

BYEXCEPTおよび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がユーザーhrshに対してのみ有効になっていることを確認します。

SELECT policy_name, enabled_option, entity_name
  FROM audit_unified_enabled_policies
  WHERE policy_name = 'DML_POL'
  ORDER BY entity_name;
 
POLICY_NAME  ENABLED_OPTION  ENTITY_NAME
-----------  -----------  ---------
DML_POL      BY           HR
DML_POL      BY           SH

次の文は、統合監査ポリシーread_dir_polhr以外のすべてのユーザーに対して有効にします。

AUDIT POLICY read_dir_pol EXCEPT hr;

次の文は、read_dir_polhr以外のすべてのユーザーに対して有効になっていることを確認します。

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_USERDB_NAMEの値を、ユーザーhrについてのすべての監査レコードに含めるようにデータベースに指示します。

AUDIT CONTEXT NAMESPACE userenv
  ATTRIBUTES current_user, db_name
  BY hr;