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;

監査ポリシーが削除されました。


不要になったポリシーは無効化、削除します。
必ず、この順番です。