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 PRIVILEGES、SYSASM、SYSBACKUP、SYSDBA、SYSDG、SYSKM、SYSRACおよび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_nameをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。
表13-1 統合監査の対象オブジェクトとアクション
| オブジェクトのタイプ | アクション |
|---|---|
|
ディレクトリ |
|
|
ファンクション |
|
|
Javaスキーマ・オブジェクト(ソース、クラス、リソース) |
|
|
ライブラリ |
|
|
マテリアライズド・ビュー |
|
|
マイニング・モデル |
|
|
オブジェクト型 |
|
|
パッケージ |
|
|
プロシージャ |
|
|
順序 |
|
|
表 |
|
|
ビュー |
|
ノート1: PL/SQLストアド・プロシージャまたはストアド・ファンクションに対するEXECUTE操作を監査する場合は、監査目的での操作の成否を判断する際に、プロシージャまたはファンクションを見つけてその実行を認証できるかどうかのみが監査対象となります。したがって、WHENEVER NOT SUCCESSFUL句を指定すると、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。プロシージャまたはファンクションの実行時に検出されたエラーは監査されません。WHENEVER SUCCESSFUL句を指定すると、実行時にエラーが検出されたかどうかに関係なく、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。
ノート2: PL/SQLストアド・プロシージャまたはストアド・ファンクション内の再帰的なSQL操作の失敗を監査するには、SQL操作の監査を構成します。
ノート3: データベース内のPL/SQLストアド・プロシージャ、ファンクションまたはパッケージに対するEXECUTEの監査は、プロシージャ、ファンクションまたはパッケージのインスタンス化フェーズで行われます。
system_action
この句を使用すると、データベースに対するシステム・アクションを監査できます。system_actionに有効な値を確認するには、COMPONENTが'Standard'であるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。
例: 統合監査でのCHANGE PASSWORDの監査
パスワードの変更を監査する監査ポリシーを構成することで、CHANGE PASSWORDシステム・アクションを監査できます。監査ポリシーを構成した後、その監査ポリシーを有効にする必要があります。
次の例では、アクションCHANGE PASSWORDを監査する監査ポリシーmypolicyを作成します:
CREATE AUDIT POLICY mypolicy ACTIONS CHANGE PASSWORD; –--------------------- Audit policy created.
次の文は、監査ポリシーmypolicyを有効にします:
AUDIT POLICY mypolicy;
監査ポリシーmypolicyは、パスワードの変更の成功および失敗の両方についてCHANGE PASSWORDアクションを監査します。
パスワードhr_pwdを持つユーザーhr_usrは、PDB hr_pdbに接続し、次のようにパスワードを変更できます。
CONNECT hr_usr/hr_pwd@hr_pdb; PASSWORD Changing password for hr_usr Old password: New password: Retype new password: Password changed.
前述のSQL*Plusの例では、ユーザーhr_usrによって実行されるコマンドPASSWORDによって、監査レコードを生成するCHANGE PASSWORDアクションが開始されます。
次のようにUNIFIED_AUDIT_TRAILを問い合せると、レコードを表示できます:
SELECT ACTION_NAME, UNIFIED_AUDIT_POLICIES, OBJECT_NAME FROM UNIFIED_AUDIT_TRAIL; ACTION_NAME ---------------------------------------------------------------- UNIFIED_AUDIT_POLICIES ---------------------------------------------------------------- OBJECT_NAME ---------------------------------------------------------------- CHANGE PASSWORD MYPOLICY HR_USR
監査ポリシーmypolicyは、ALTER USER文を介してパスワードの変更を取得しないことに注意してください。
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の有効なアクションを確認するには、COMPONENTがDatapumpである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の有効なアクションを確認するには、COMPONENTがDirect 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の有効なアクションを確認するには、COMPONENTがLabel 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の有効なアクションを確認するには、COMPONENTがXSである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の有効なアクションを確認するには、COMPONENTがDatabase VaultであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。たとえば:
SELECT name FROM auditable_system_actions WHERE component = 'Database Vault';
object_nameには、監査するDatabase Vaultオブジェクトの名前を指定します。
Oracle Database Vaultの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
PROTOCOL
PROTOCOLコンポーネントを使用すると、FTPおよびHTTPメッセージを監査できます。
例1: すべてのHTTPメッセージの監査
CREATE AUDIT POLICY mypolicy ACTIONS COMPONENT = PROTOCOL HTTP; AUDIT POLICY mypolicy;
例2: 失敗したFTPメッセージの監査
CREATE AUDIT POLICY mypolicy ACTIONS COMPONENT = PROTOCOL FTP;
AUDIT POLICY mypolicy WHENEVER NOT SUCCESSFUL;例3: 401 AUTH応答があったHTTPメッセージの監査
CREATE AUDIT POLICY mypolicy ACTIONS COMPONENT = PROTOCOL AUTHENTICATION;
AUDIT POLICY mypolicy;role_audit_clause
この句を使用すると、監査するロールを1つ以上指定できます。ロールを監査すると、そのロールに直接付与されたすべてのシステム権限が監査されます。このシステム権限が必要になるSQL文が監査されます。roleには、ユーザー定義(ローカルまたは外部)のロール、または事前定義されたロールを指定します。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。
WHEN句
この句を使用すると、統合監査ポリシーが適用される時間を制御できます。
audit_condition
統合監査ポリシーが適用されているかどうかを判断する条件を指定します。audit_conditionの評価がTRUEの場合は、ポリシーが適用されています。FALSEの場合は、ポリシーが適用されていません。
audit_conditionの最大長は4,000文字です。これには、式だけでなく、次のファンクションと条件を含めることができます。
-
数値ファンクション:
BITAND、CEIL、FLOOR、POWER -
文字値を返す文字ファンクション:
CONCAT、LOWER、UPPER -
数値を返す文字ファンクション:
INSTR、LENGTH -
環境および識別子ファンクション:
SYS_CONTEXT、UID -
比較条件:
=、!=、<>、<、>、<=、>= -
論理条件:
AND、OR -
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句は、各コンテナのインスタンスごとに監査条件を評価します。たとえば、あるコンテナ内で条件が評価された場合、その条件は、インスタンスが同一の場合でも他のコンテナ内で再度評価されます。
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の場合、統合監査ポリシーは、インスタンスのその後の存続期間中に該当するすべての文に適用されません。
ONLY TOPLEVEL
ユーザーが直接発行したSQL文を監査する場合は、ONLY TOPLEVELを指定します。
PL/SQLプロシージャ内から実行されるSQL文は、トップレベルの文とはみなされません。トップレベルの文は、SYSも含めてすべてのユーザーが監査できます。
詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。
CONTAINER句
CONTAINER句を使用すると、統合監査ポリシーの有効範囲を指定できます。
-
CONTAINER=ALLを指定すると、共通の統合監査ポリシーを作成できます。このタイプのポリシーは、CDB内のすべてのプラガブル・データベース(PDB)に使用できます。現在のコンテナがルートである必要があります。ACTIONSobject_actionONまたはACTIONSALLON句を指定する場合は、共通オブジェクトまたはアプリケーション共通オブジェクトを指定する必要があります。 -
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_polがAUDIT_UNIFIED_POLICIESビューにあるこを確認します。
SELECT * FROM audit_unified_policies WHERE policy_name = 'TABLE_POL';
オブジェクトに対するアクションの監査: 例
次の文では、統合監査ポリシーdml_polを作成します。このポリシーは、表hr.employeesに対するDELETE、INSERT、UPDATEアクション、および表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;
大量の監査レコードを生成せずにデータベース・アクションを監査するためのガイドラインは、Databaseセキュリティ・ガイドの31.4.4.11例: データベース内のすべてのアクションの監査を参照してください。
コンポーネント・アクションの監査: 例
次の問合せは、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_adminとjava_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に対するDELETE、INSERT、UPDATEアクションを監査します。このポリシーは、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;





