Oracle 12cで非常に使いやすくなった監査機能「Unified Audit(統合監査)」を検証してみましょう。
どのように監査するかは全てポリシーで定義され、監査証跡はどのような内容でも、「unified_audit_trail」ビューで共通で確認することが出来ます。
[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba
SQL> SELECT value FROM v$option WHERE parameter='Unified Auditing';
VALUE
----------------------------------------------------------------
FALSE
デフォルトでは統合監査は有効になっていません。
[root@DB01 ~]# su - oracle
[oracle@DB01 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@DB01 lib]$ make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
有効にするにはoracleユーザーでライブラリをmakeします。
SQL> SELECT value FROM v$option WHERE parameter='Unified Auditing';
VALUE
----------------------------------------------------------------
TRUE
統合監査が有効になりました。
SQL> CREATE USER test IDENTIFIED BY password QUOTA UNLIMITED ON users;
ユーザーが作成されました。
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE TO test;
権限付与が成功しました。
統合監査確認用のtestユーザーを作成します。
create tableとcreate sequenceの権限をtestに付与します。
これらの権限がtestによって利用された時に監査ログを出力するように設定してみます。
CREATE AUDIT POLICY test_audit_policy
PRIVILEGES CREATE TABLE,CREATE SEQUENCE
WHEN 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''TEST'''
EVALUATE PER SESSION
CONTAINER = CURRENT;
監査ポリシーが作成されました。
まずポリシーを作成します。
「WHEN 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''TEST''」→ユーザーがtestの時、
「PRIVILEGES CREATE TABLE,CREATE SEQUENCE」→create tableとcreate sequenceの権限が利用されたら監査ログを出力する。
こんな感じのポリシーです。
AUDIT POLICY test_audit_policy;
監査が成功しました。
監査ポリシーを有効化します。
SET LINESIZE 200
COLUMN audit_option FORMAT A15
COLUMN condition_eval_opt FORMAT A10
COLUMN audit_condition FORMAT A50
SELECT audit_option,
condition_eval_opt,
audit_condition
FROM audit_unified_policies
WHERE policy_name = 'TEST_AUDIT_POLICY';
AUDIT_OPTION CONDITION_ AUDIT_CONDITION
--------------- ---------- --------------------------------------------------
CREATE SEQUENCE SESSION SYS_CONTEXT('USERENV','SESSION_USER')='TEST'
CREATE TABLE SESSION SYS_CONTEXT('USERENV','SESSION_USER')='TEST'
作成したポリシーはaudit_unified_policiesビューで確認できます。
[oracle@DB01 ~]$ sqlplus test/password@localhost/pdb1.test.local
SQL> CREATE TABLE tab1 (id NUMBER);
表が作成されました。
SQL> CREATE SEQUENCE tab1_seq;
順序が作成されました。
実際にtestユーザーで該当の権限を利用してみます。
[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba
SET LINESIZE 200
COLUMN event_timestamp FORMAT A30
COLUMN dbusername FORMAT A10
COLUMN action_name FORMAT A20
COLUMN object_schema FORMAT A10
COLUMN object_name FORMAT A20
SELECT event_timestamp,
dbusername,
action_name,
object_schema,
object_name
FROM unified_audit_trail
WHERE dbusername = 'TEST'
ORDER BY event_timestamp;
EVENT_TIMESTAMP DBUSERNAME ACTION_NAME OBJECT_SCH OBJECT_NAME
------------------------------ ---------- -------------------- ---------- --------------------
16-07-13 00:37:58.913061 TEST CREATE TABLE TEST TAB1
16-07-13 00:38:27.946879 TEST CREATE SEQUENCE TEST TAB1_SEQ
unified_audit_trailビューを確認しています。
しっかりとログが出力されていました。
SQL> NOAUDIT POLICY test_audit_policy;
監査取消しが成功しました。
SQL> DROP AUDIT POLICY test_audit_policy;
監査ポリシーが削除されました。
不要になったポリシーは無効化、削除します。
必ず、この順番です。
どのように監査するかは全てポリシーで定義され、監査証跡はどのような内容でも、「unified_audit_trail」ビューで共通で確認することが出来ます。
[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba
SQL> SELECT value FROM v$option WHERE parameter='Unified Auditing';
VALUE
----------------------------------------------------------------
FALSE
デフォルトでは統合監査は有効になっていません。
[root@DB01 ~]# su - oracle
[oracle@DB01 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@DB01 lib]$ make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
有効にするにはoracleユーザーでライブラリをmakeします。
SQL> SELECT value FROM v$option WHERE parameter='Unified Auditing';
VALUE
----------------------------------------------------------------
TRUE
統合監査が有効になりました。
SQL> CREATE USER test IDENTIFIED BY password QUOTA UNLIMITED ON users;
ユーザーが作成されました。
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE TO test;
権限付与が成功しました。
統合監査確認用のtestユーザーを作成します。
create tableとcreate sequenceの権限をtestに付与します。
これらの権限がtestによって利用された時に監査ログを出力するように設定してみます。
CREATE AUDIT POLICY test_audit_policy
PRIVILEGES CREATE TABLE,CREATE SEQUENCE
WHEN 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''TEST'''
EVALUATE PER SESSION
CONTAINER = CURRENT;
監査ポリシーが作成されました。
まずポリシーを作成します。
「WHEN 'SYS_CONTEXT(''USERENV'',''SESSION_USER'')=''TEST''」→ユーザーがtestの時、
「PRIVILEGES CREATE TABLE,CREATE SEQUENCE」→create tableとcreate sequenceの権限が利用されたら監査ログを出力する。
こんな感じのポリシーです。
AUDIT POLICY test_audit_policy;
監査が成功しました。
監査ポリシーを有効化します。
SET LINESIZE 200
COLUMN audit_option FORMAT A15
COLUMN condition_eval_opt FORMAT A10
COLUMN audit_condition FORMAT A50
SELECT audit_option,
condition_eval_opt,
audit_condition
FROM audit_unified_policies
WHERE policy_name = 'TEST_AUDIT_POLICY';
AUDIT_OPTION CONDITION_ AUDIT_CONDITION
--------------- ---------- --------------------------------------------------
CREATE SEQUENCE SESSION SYS_CONTEXT('USERENV','SESSION_USER')='TEST'
CREATE TABLE SESSION SYS_CONTEXT('USERENV','SESSION_USER')='TEST'
作成したポリシーはaudit_unified_policiesビューで確認できます。
[oracle@DB01 ~]$ sqlplus test/password@localhost/pdb1.test.local
SQL> CREATE TABLE tab1 (id NUMBER);
表が作成されました。
SQL> CREATE SEQUENCE tab1_seq;
順序が作成されました。
実際にtestユーザーで該当の権限を利用してみます。
[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba
SET LINESIZE 200
COLUMN event_timestamp FORMAT A30
COLUMN dbusername FORMAT A10
COLUMN action_name FORMAT A20
COLUMN object_schema FORMAT A10
COLUMN object_name FORMAT A20
SELECT event_timestamp,
dbusername,
action_name,
object_schema,
object_name
FROM unified_audit_trail
WHERE dbusername = 'TEST'
ORDER BY event_timestamp;
EVENT_TIMESTAMP DBUSERNAME ACTION_NAME OBJECT_SCH OBJECT_NAME
------------------------------ ---------- -------------------- ---------- --------------------
16-07-13 00:37:58.913061 TEST CREATE TABLE TEST TAB1
16-07-13 00:38:27.946879 TEST CREATE SEQUENCE TEST TAB1_SEQ
unified_audit_trailビューを確認しています。
しっかりとログが出力されていました。
SQL> NOAUDIT POLICY test_audit_policy;
監査取消しが成功しました。
SQL> DROP AUDIT POLICY test_audit_policy;
監査ポリシーが削除されました。
不要になったポリシーは無効化、削除します。
必ず、この順番です。

コメント