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
作成する統合監査ポリシーの名前を指定します。ポリシーの名前は、COMMON_USER_PREFIX
初期化パラメータの値で開始する必要があります。COMMON_USER_PREFIX
パラメータのデフォルト値はc##
です。
監査ポリシー名の長さは128バイトを超えることはできず、ASCII文字のみを含める必要があります。
これらのルールは、アプリケーション共通監査ポリシーにも適用されます。この場合、COMMON_USER_PREFIX
の値はアプリケーション・ルートからフェッチされます。アプリケーション・ルートのデフォルト値は空の文字列です。
名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件も満たしている必要があります。
すべての監査ポリシーの名前を確認するには、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
の監査は、プロシージャ、ファンクションまたはパッケージのインスタンス化フェーズで行われます。
ノート3: GRANT
オブジェクト監査オプションの監査では、REVOKE
監査オプションも監査されます。
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)に使用できます。現在のコンテナがルートである必要があります。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_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;
次の文は、統合監査ポリシー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_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 c##common_role1_pol ROLES c##role1 CONTAINER = ALL;
列に対する監査ポリシーの作成: 例
監査ポリシーpol
は、emp
表の列job
に対する権限を付与したときに監査レコードを生成します。
CREATE AUDIT POLICY pol ACTIONS GRANT(job) on scott.emp;
監査ポリシーpol
は、dept
表に新しい部門番号が挿入されたときに監査レコードを生成します。
CREATE AUDIT POLICY pol ACTIONS INSERT(deptno) on scott.dept;