unified audit機能で様々なactionを監査証跡として記録することが出来ます。

[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba

SQL> CREATE USER test2 IDENTIFIED BY password QUOTA UNLIMITED ON users;

ユーザーが作成されました。

SQL> GRANT CREATE SESSION TO test2;

権限付与が成功しました。


まず、テスト用にユーザーを作成します。

[oracle@DB01 ~]$ sqlplus test/password@localhost/pdb1.test.local

SQL> DROP TABLE tab1 PURGE;

表が削除されました。

SQL> DROP SEQUENCE tab1_seq;

順序が削除されました。

SQL> CREATE TABLE tab1 (
  2  id NUMBER,
  3  CONSTRAINT tab1_pk PRIMARY KEY(id)
  4  );

表が作成されました。

SQL> CREATE SEQUENCE tab1_seq;

順序が作成されました。

SQL> CREATE TABLE tab2 (
  2  id NUMBER,
  3  CONSTRAINT tab2_pk PRIMARY KEY(id)
  4  );

表が作成されました。

SQL> CREATE SEQUENCE tab2_seq;

順序が作成されました。


さらにテスト用にテーブルと順序をそれぞれ2つ作成します。

SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON tab1 TO test2;

権限付与が成功しました。

SQL> GRANT SELECT ON tab1_seq TO test2;

権限付与が成功しました。

SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON tab2 TO test2;

権限付与が成功しました。

SQL> GRANT SELECT ON tab2_seq TO test2;

権限付与が成功しました。


それぞれのオブジェクトに対してテスト用ユーザーの権限を与えます。

[oracle@DB01 ~]$ sqlplus sys/password@localhost/pdb1.test.local as sysdba

CREATE AUDIT POLICY test_audit_policy
ACTIONS DELETE ON test.tab1,
    INSERT ON test.tab1,
    UPDATE ON test.tab1,
    SELECT ON test.tab1_seq,
    ALL ON test.tab2,
    SELECT ON test.tab2_seq
WHEN    'SYS_CONTEXT(''USERENV'',''SESSION_USER'') =''TEST2'''
EVALUATE PER SESSION
CONTAINER = CURRENT;

監査ポリシーが作成されました。


新しく監査ポリシーを作成します。
テスト用ユーザー「test2」が行なうアクションを細かく監査しています。

AUDIT POLICY test_audit_policy;

監査が成功しました。


ポリシーを有効化します。

[oracle@DB01 ~]$ sqlplus test/password@localhost/pdb1.test.local

SQL> INSERT INTO tab1 (id) VALUES (tab1_seq.NEXTVAL);

1行が作成されました。

SQL> INSERT INTO tab2 (id) VALUES (tab2_seq.NEXTVAL);

1行が作成されました。


監査ポリシーで指定しなかったユーザーでinsertと順序に関するアクションを行ないます。

[oracle@DB01 ~]$ sqlplus test2/password@localhost/pdb1.test.local

SQL> UPDATE test.tab1 SET id = test.tab1_seq.NEXTVAL;

1行が更新されました。

SQL> UPDATE test.tab2 SET id = test.tab2_seq.NEXTVAL;

1行が更新されました。

SQL> DELETE FROM test.tab1;

1行が削除されました。

SQL> DELETE FROM test.tab2;

1行が削除されました。

SQL> COMMIT;

コミットが完了しました。


監査対象のユーザーで色々なアクションを実行してみます。

[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 LIKE 'TEST%'
ORDER BY event_timestamp;

EVENT_TIMESTAMP                DBUSERNAME ACTION_NAME          OBJECT_SCH OBJECT_NAME
------------------------------ ---------- -------------------- ---------- --------------------
16-07-14 00:54:12.383998       TEST2      SELECT               TEST       TAB1_SEQ
16-07-14 00:54:12.384101       TEST2      UPDATE               TEST       TAB1
16-07-14 00:54:24.204044       TEST2      SELECT               TEST       TAB2_SEQ
16-07-14 00:54:24.204085       TEST2      UPDATE               TEST       TAB2
16-07-14 00:55:19.633921       TEST2      DELETE               TEST       TAB1
16-07-14 00:55:27.427667       TEST2      DELETE               TEST       TAB2


早速、監査証跡 unified_audit_trailを確認します。
監査対象外のユーザーtestのアクションは一切記録されていません。
その一方で今回作成した監査対象のユーザーtest2は記録されています。