CREATE AUDIT POLICY (統合監査)

この項では、統合監査CREATE AUDIT POLICY文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

目的

CREATE AUDIT POLICY文を使用すると、統合監査ポリシーを作成できます。

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。共通の統合監査ポリシーを作成する場合は、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを作成する場合は、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、接続先のコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

create_audit_policy::=

ノート:

少なくともprivilege_audit_clause句、action_audit_clause句、またはrole_audit_clause句のいずれか1つを指定する必要があります。

(privilege_audit_clause::=action_audit_clause::=role_audit_clause::=)

privilege_audit_clause::=

action_audit_clause::=

ノート:

standard_actions句とcomponent_actions句は単独で指定することも、どちらかの順序で指定することもできますが、それぞれの句を指定できるのは1回のみです。

standard_actions::=

component_actions::=

role_audit_clause::=

セマンティクス

policy

作成する統合監査ポリシーの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

すべての監査ポリシーの名前を確認するには、AUDIT_UNIFIED_POLICIESビューを問い合せます。

関連項目:

AUDIT_UNIFIED_POLICIESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

privilege_audit_clause

この句を使用すると、1つ以上のシステム権限を監査できます。system_privilegeには、有効なシステム権限を指定します。すべての有効なシステム権限を確認するには、SYSTEM_PRIVILEGE_MAPビューのNAME列を問い合せます。

システム権限を正常に利用するSQL文のみが監査されます。文でシステム権限が使用されていない場合、privilege_audit_clauseでは文の監査は行われません。

システム権限の監査の制限事項

システム権限INHERIT ANY PRIVILEGESSYSASMSYSBACKUPSYSDBASYSDGSYSKMおよびSYSOPERを監査することはできません。

action_audit_clause

この句を使用すると、1つ以上のアクションを監査対象に指定できます。standard_actions句を使用すると、標準RDBMSオブジェクトに対するアクションおよびデータベースに対する標準RDBMSシステム・アクションを監査できます。component_actions句を使用すると、コンポーネントに対するアクションを監査できます。

standard_actions

この句を使用すると、標準RDBMSオブジェクトに対するアクションおよびデータベースに対する標準RDBMSシステム・アクションを監査できます。

object_action ON

この句を使用すると、指定したオブジェクトに対するアクションを監査できます。object_actionには、監査するアクションを指定します。表13-1に、各オブジェクト型について監査可能なアクションを示します。

ALL ON

この句を使用すると、指定したオブジェクトに対するすべてのアクションを監査できます。ON句で指定したオブジェクトのタイプについて、表13-1にリストされたすべてのアクションが監査されます。

ON句

ON句を使用すると、監査するオブジェクトを指定できます。ディレクトリとデータ・マイニング・モデルは、個別のネームスペースに含まれるため個別に識別されます。ディレクトリに対するアクションを監査する場合は、ON DIRECTORY directory_nameを指定します。データ・マイニング・モデルに対するアクションを監査する場合は、ON MINING MODEL object_nameを指定します。表13-1にリストされたその他のオブジェクトのタイプに対するアクションを監査するには、ON object_nameを指定します。object_nameschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

表13-1 統合監査の対象オブジェクトとアクション

オブジェクトのタイプ アクション

ディレクトリ

AUDITGRANTREAD

ファンクション

AUDITEXECUTE (ノート1と2)、GRANT

Javaスキーマ・オブジェクト(ソース、クラス、リソース)

AUDITEXECUTEGRANT

ライブラリ

EXECUTEGRANT

マテリアライズド・ビュー

ALTERAUDITCOMMENTDELETEINDEXINSERTLOCKSELECTUPDATE

マイニング・モデル

AUDITCOMMENTGRANTRENAMESELECT

オブジェクト型

ALTERAUDITGRANT

パッケージ

AUDITEXECUTEGRANT

プロシージャ

AUDITEXECUTE (ノート1と2)、GRANT

順序

ALTERAUDITGRANTSELECT

ALTERAUDITCOMMENTDELETEFLASHBACKGRANTINDEXINSERTLOCKRENAMESELECTUPDATE

ビュー

AUDITDELETEFLASHBACKGRANTINSERTLOCKRENAMESELECTUPDATE

ノート1: PL/SQLストアド・プロシージャまたはストアド・ファンクションでのEXECUTE操作を監査する場合は、監査目的での操作の成否を判断する際に、プロシージャまたはファンクションを検索してその実行を認証する機能のみが監査対象となります。したがって、WHENEVER NOT SUCCESSFUL句を指定すると、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。プロシージャまたはファンクションの実行時に検出されたエラーは監査されません。WHENEVER SUCCESSFUL句を指定すると、実行時にエラーが検出されたかどうかに関係なく、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。

ノート2: PL/SQLストアド・プロシージャまたはストアド・ファンクション内の再帰的なSQL操作の失敗を監査するには、SQL操作の監査を構成します。

system_action

この句を使用すると、データベースに対するシステム・アクションを監査できます。system_actionに有効な値を確認するには、COMPONENTが'Standard'であるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。

ALL

この句を使用すると、データベースに対するシステムのすべてのアクションを監査できます。

component_actions

この句を使用すると、各コンポーネント(Oracle Data Pump、Oracle SQL*Loader Direct Path Load、Oracle Label Security、Oracle Database Real Application Security、Oracle Database Vault)に対するアクションを監査できます。

DATAPUMP

この句を使用すると、Oracle Data Pumpに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Data Pumpの有効なアクションを確認するには、COMPONENTDatapumpであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:

SELECT name FROM auditable_system_actions WHERE component = 'Datapump';

Oracle Data Pumpの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

DIRECT_LOAD

この句を使用すると、Oracle SQL*Loader Direct Path Loadに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle SQL*Loader Direct Path Loadの有効なアクションを確認するには、COMPONENTDirect path APIであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:

SELECT name FROM auditable_system_actions WHERE component = 'Direct path API';

Oracle SQL*Loader Direct Path Loadの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

OLS

この句を使用すると、Oracle Label Securityに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Label Securityの有効なアクションを確認するには、COMPONENTLabel SecurityであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:

SELECT name FROM auditable_system_actions WHERE component = 'Label Security';

Oracle Label Securityの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

XS

この句を使用すると、Oracle Database Real Application Securityに対するアクションを監視できます。component_actionには、監査するアクションを指定します。Oracle Database Real Application Securityの有効なアクションを確認するには、COMPONENTXSであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:

SELECT name FROM auditable_system_actions WHERE component = 'XS';

Oracle Database Real Application Securityの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

DV

この句を使用すると、Oracle Database Vaultに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Database Vaultの有効なアクションを確認するには、COMPONENTDatabase VaultであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:

SELECT name FROM auditable_system_actions WHERE component = 'Database Vault';

object_nameには、監査するDatabase Vaultオブジェクトの名前を指定します。

Oracle Database Vaultの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

role_audit_clause

この句を使用すると、監査するロールを1つ以上指定できます。ロールを監査すると、そのロールに直接付与されたすべてのシステム権限が監査されます。このシステム権限が必要になるSQL文が監査されます。roleには、ユーザー定義(ローカルまたは外部)のロール、または事前定義されたロールを指定します。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。

WHEN句

この句を使用すると、統合監査ポリシーが適用される時間を制御できます。

audit_condition

統合監査ポリシーが適用されているかどうかを判断する条件を指定します。audit_conditionの評価がTRUEの場合は、ポリシーが適用されています。FALSEの場合は、ポリシーが適用されていません。

audit_conditionの最大長は4,000文字です。これには、式だけでなく、次のファンクションと条件を含めることができます。

  • 数値ファンクション: BITANDCEILFLOORPOWER

  • 文字値を返す文字ファンクション: CONCATLOWERUPPER

  • 数値を返す文字ファンクション: INSTRLENGTH

  • 環境および識別子ファンクション: SYS_CONTEXTUID

  • 比較条件: =!=<><><=>=

  • 論理条件: ANDOR

  • NULL条件: IS [NOT] NULL

  • [NOT] BETWEEN条件

  • [NOT] IN条件

audit_conditionは、一重引用符で囲む必要があります。audit_conditionに一重引用符が含まれているときには、そのかわりに2つの一重引用符を指定します。たとえば、次の条件を指定するとします。

SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') = 'myclient'

'audit_condition'は、次のように指定します。

'SYS_CONTEXT(''USERENV'', ''CLIENT_IDENTIFIER'') = ''myclient'''

EVALUATE PER STATEMENT

この句を指定すると、監査可能な文ごとにaudit_conditionを評価できます。audit_conditionの評価がTRUEの場合、統合監査ポリシーが文に適用されます。FALSEの場合、統合監査ポリシーは文に適用されません。

EVALUATE PER SESSION

この句を指定すると、セッション中にaudit_conditionを1回評価します。audit_conditionは、セッション中に実行される最初の監査可能な文に対して評価されます。audit_conditionの評価がTRUEの場合、統合監査ポリシーは、その後のセッション中に該当するすべての文に適用されます。FALSEの場合、統合監査ポリシーは、その後のセッション中に該当するすべての文に適用されません。

EVALUATE PER INSTANCE

この句を指定すると、インスタンスの存続期間中にaudit_conditionを1回評価します。audit_conditionは、インスタンスの存続期間中に実行される最初の監査可能な文に対して評価されます。audit_conditionの評価がTRUEの場合、統合監査ポリシーは、インスタンスのその後の存続期間中に該当するすべての文に適用されます。FALSEの場合、統合監査ポリシーは、インスタンスのその後の存続期間中に該当するすべての文に適用されません。

CONTAINER句

CONTAINER句を使用すると、統合監査ポリシーの有効範囲を指定できます。

  • CONTAINER = ALLを指定すると、共通の統合監査ポリシーを作成できます。このタイプのポリシーは、CDB内のすべてのプラガブル・データベース(PDB)に使用できます。現在のコンテナがルートである必要があります。ACTIONS object_action ONまたはACTIONS ALL ON句を指定する場合は、共通オブジェクトまたはアプリケーション共通オブジェクトを指定する必要があります。

  • CONTAINER = CURRENTを指定すると、接続先のコンテナにローカルの統合監査ポリシーを作成できます。現在のコンテナは、ルートまたはPDBにできます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

ノート:

統合監査ポリシーは、作成後に有効範囲を変更できません。

システム権限の監査: 例

次の文は、統合監査ポリシーtable_polを作成します。このポリシーは、システム権限CREATE ANY TABLEおよびDROP ANY TABLEを監査します。

CREATE AUDIT POLICY table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;

次の文は、table_polAUDIT_UNIFIED_POLICIESビューにあるこを確認します。

SELECT *
  FROM audit_unified_policies
  WHERE policy_name = 'TABLE_POL';

オブジェクトに対するアクションの監査: 例

次の文では、統合監査ポリシーdml_polを作成します。このポリシーは、表hr.employeesに対するDELETEINSERTUPDATEアクション、および表hr.departmentsに対するすべての監査可能なアクションを監査します。

CREATE AUDIT POLICY dml_pol
  ACTIONS DELETE on hr.employees,
          INSERT on hr.employees,
          UPDATE on hr.employees,
          ALL on hr.departments;

次の文は、統合監査ポリシーread_dir_polを作成します。このポリシーは、ディレクトリbfile_dir (「ディレクトリの作成: 例」で作成したディレクトリ)に対するREADアクションを監査します。

CREATE AUDIT POLICY read_dir_pol
  ACTIONS READ ON DIRECTORY bfile_dir;

システム・アクションの監査: 例

次の問合せは、データベースに対する監査可能な標準RDBMSシステム・アクションを表示します。

SELECT name FROM auditable_system_actions
  WHERE component = 'Standard'
  ORDER BY name;

NAME
----
ADMINISTER KEY MANAGEMENT
ALL
ALTER ASSEMBLY
ALTER AUDIT POLICY
ALTER CLUSTER
...

次の文は、統合監査ポリシーsecurity_polを作成します。このポリシーは、システム・アクションADMINISTER KEY MANAGEMENTを監査します。

CREATE AUDIT POLICY security_pol
  ACTIONS ADMINISTER KEY MANAGEMENT;

次の文は、統合監査ポリシーdir_polを作成します。このポリシーは、任意のディレクトリに対するすべての読取り、書込みおよび実行操作を監査します。

CREATE AUDIT POLICY dir_pol
  ACTIONS READ DIRECTORY, WRITE DIRECTORY, EXECUTE DIRECTORY;

次の文は、統合監査ポリシーall_actions_polを作成します。このポリシーは、データベースに対するすべての標準RDBMSシステム・アクションを監査します。

CREATE AUDIT POLICY all_actions_pol
  ACTIONS ALL;

コンポーネント・アクションの監査: 例

次の問合せは、Oracle Data Pumpに対する監査可能なアクションを表示します。

SELECT name FROM auditable_system_actions
  WHERE component = 'Datapump';

NAME
----
EXPORT
IMPORT
ALL

次の文は、統合監査ポリシーdp_actions_polを作成します。このポリシーは、Oracle Data Pumpに対するIMPORTアクションを監査します。

CREATE AUDIT POLICY dp_actions_pol
  ACTIONS COMPONENT = datapump IMPORT;

ロールの監査: 例

次の文は、統合監査ポリシーjava_polを作成します。このポリシーは、事前定義されたロールjava_adminjava_deployを監査します。

CREATE AUDIT POLICY java_pol
  ROLES java_admin, java_deploy;

システム権限、アクションおよびロールの監査: 例

次の文は、統合監査ポリシーhr_admin_polを作成します。このポリシーは、複数のシステム権限、アクションおよびロールを監査します。

CREATE AUDIT POLICY hr_admin_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  ACTIONS DELETE on hr.employees,
          INSERT on hr.employees,
          UPDATE on hr.employees,
          ALL on hr.departments,
          LOCK TABLE
  ROLES audit_admin, audit_viewer;

統合監査ポリシーをいつ適用するかの制御: 例

次の文は、統合監査ポリシーorder_updates_polを作成します。このポリシーは、表oe.ordersに対するUPDATEアクションを監査します。このポリシーは、外部ユーザーが監査可能な文を発行したときのみ適用されます。監査条件は、セッションごとに1回検査されます。

CREATE AUDIT POLICY order_updates_pol
  ACTIONS UPDATE ON oe.orders
  WHEN 'SYS_CONTEXT(''USERENV'', ''IDENTIFICATION_TYPE'') = ''EXTERNAL'''
  EVALUATE PER SESSION;

次の文は、統合監査ポリシーemp_updates_polを作成します。このポリシーは、表hr.employeesに対するDELETEINSERTUPDATEアクションを監査します。このポリシーは、UIDが100、105、または107ではないユーザーが監査可能な文を発行したときにのみ適用されます。監査条件は、監査可能な文ごとに検査されます。

CREATE AUDIT POLICY emp_updates_pol
  ACTIONS DELETE on hr.employees,
          INSERT on hr.employees,
          UPDATE on hr.employees
  WHEN 'UID NOT IN (100, 105, 107)'
  EVALUATE PER STATEMENT;

ローカルの統合監査ポリシーの作成: 例

次の文は、統合監査ポリシーlocal_table_polを作成します。このポリシーは、現在のコンテナ内のシステム権限CREATE ANY TABLEおよびDROP ANY TABLEを監査します。

CREATE AUDIT POLICY local_table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  CONTAINER = CURRENT;

共通の統合監査ポリシーの作成: 例

次の文は、共通の統合監査ポリシーcommon_role1_polを作成します。このポリシーは、CDB全体にわたって共通ロールc##role1 (「CREATE ROLE」の「例」で作成した共通ロール)を監査します。

CREATE AUDIT POLICY common_role1_pol
  ROLES c##role1
  CONTAINER = ALL;