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は記録されています。
[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は記録されています。