3. サービス・インスタンスの運用管理
3.8 データベース監査証跡の退避と削除
データベースの監査設定は下表の通りです。
監査種別 有効になっている監査設定 監査証跡レコードの確認ビュー データベースのバージョン 11g 12c/18c 標準監査 システム監査 CREATE SESSION DBA_AUDIT_TRAIL ○ ○
権限監査 CREATE SESSION セッション監査 有効
オブジェクト監査 以下のユーザーのオブジェクト DVF ユーザー
DVSYS ユーザー LBACSYS ユーザー 統合監査 ORA_SECURECONFIG ポリシー
ORA_LOGON_FAILURES ポリシー
UNIFIED_AUDIT_TRAIL ○
監査証跡はデータベースに蓄積し続けます。利用者の運用に合わせて定期的に退避、削除してください。
監査証跡の退避、削除には DBMS_AUDIT_MGMT パッケージを使用します。本章では以下の退避、削除手順を説明します。
(1)一定期間経過した監査証跡レコードを別表にコピー (2)一定期間経過した監査証跡レコードの削除 (3)エクスポートによる別表の退避
(4)別表の削除
DBMS_AUDIT_MGMT パッケージについては、以下のマニュアルを参照ください。
Oracle Database PL/SQL パッケージおよびタイプ・リファレンス 11g リリース 2(11.2) 「27 DBMS_AUDIT_MGMT」
https://docs.oracle.com/cd/E16338_01/appdev.112/b56262/d_audit_mgmt.htm#BABJECFB
Oracle Database PL/SQL パッケージおよびタイプ・リファレンス 12c リリース 1 (12.1) 「29 DBMS_AUDIT_MGMT」
https://docs.oracle.com/cd/E57425_01/121/ARPLS/d_audit_mgmt.htm#BABJECFB
Oracle Database PL/SQL パッケージおよびタイプ・リファレンス 12c リソース 2 (12.2) 「26 DBMS_AUDIT_MGMT」
https://docs.oracle.com/cd/E82638_01/arpls/DBMS_AUDIT_MGMT.html#GUID-C704D6B0-A6ED-4CFC -B364-CC008CFF76F1
Oracle Database PL/SQL パッケージおよびタイプ・リファレンス 18c 「26 DBMS_AUDIT_MGMT」
https://docs.oracle.com/cd/E96517_01/arpls/DBMS_AUDIT_MGMT.html#GUID-C704D6B0-A6ED-4CFC -B364-CC008CFF76F1
標準監査と統合監査ではメンテナンス手順が異なります。 3.8.1、3.8.2 でそれぞれの手順を説明します。
125
Copyright 2017-2019 FUJITSU LIMITED
3.8.1 標準監査証跡の退避と削除
(1)一定期間経過した監査証跡レコードを別表にコピー
Oracle クライアントの SQL*Plus から対象のデータベース・インスタンス、またはコンテナ(CDB$ROOT, PDB)に SYS ユ ーザーで接続します。接続後、DBA_AUDIT_TRAIL ビューのレコード数を確認し(任意)、ユーザーの別表にコピーし ます。
SQL> SELECT COUNT (*) from DBA_AUDIT_TRAIL;
SQL> CREATE TABLE user_name.table_name AS SELECT * FROM DBA_AUDIT_TRAIL WHERE EXTENDED_TIMESTAMP < TRUNC(SYSDATE - days);
user_name, table_name, days に指定する値について説明します。
可変部分 説明
user_name 監査証跡レコードを退避するための表の所有ユーザーを指定します。
Oracle11gR2、または Oracle12c/18c の PDB で実行する場合は一般ユーザー名を指定します。
Oracle12c/18c の CDB$ROOT で実行する場合は共通ユーザー(C##***)を作成しそのユーザ ー名を指定します。
table_name 監査証跡レコードを退避するための表名を指定します。
days 何日前の監査証跡レコードを退避するのか、その期間を指定します。
7 日前より古い監査証跡レコードを退避する場合は 7 とします。
以下は CDB$ROOT の C##CP_AUD1 ユーザーに aud_copy 表を作成し、7 日前より古い監査証跡レコードをコピ ーする場合のコマンド例です。
SQL>CREATE TABLE C##CP_AUD1.aud_copy AS SELECT * FROM DBA_AUDIT_TRAIL WHERE EXTENDED_TIMESTAMP < TRUNC(SYSDATE - 7);
作成した表のレコード数を確認する、または作成した表を検索し、正しくコピーできていることを確認してください。
(2)一定期間経過した監査証跡レコードの削除
①~④を順に実行してください。
①削除前の処理
前準備としてクリーンアップを行うプロシージャの初期設定を行います。
SQL> BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, DEFAULT_CLEANUP_INTERVAL => 12);
END;
/
126
Copyright 2017-2019 FUJITSU LIMITED
②アーカイブ済み日時の設定
監査証跡レコードにアーカイブ済みの日時(削除可能な日時)を設定します。特に条件がない場合は days に(1)で 指定した値を指定します。
SQL> BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, LAST_ARCHIVE_TIME => TRUNC (SYSDATE - days),
CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);
END;
/
③アーカイブ済みの監査証跡レコードの削除 次の SQL を実行します。
SQL> BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
/
DBA_AUDIT_TRAIL のレコード数を確認する、または表を検索しアーカイブ済みの監査証跡レコードが削除されている ことを確認してください。レコード数を確認する SQL は(1)を参照ください。
④削除後の処理
次の SQL を実行します。
SQL> BEGIN
DBMS_AUDIT_MGMT.DEINIT_CLEANUP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD);
END;
/
(3)エクスポートによる別表の退避
(1)で作成した別表を DataPump Export により退避します。
DataPump Export の実行手順については、「2.8.2.2 Datapump Export の使用方法」を参照ください。
127
Copyright 2017-2019 FUJITSU LIMITED (4)別表の削除
(1)で作成した別表が不要な場合は削除します。
SQL> DROP TABLE user_name.table_name PURGE;
3.8.2 統合監査証跡の退避と削除
(1)一定期間経過した監査証跡レコードを別表にコピー
Oracle クライアントの SQL*Plus から対象のデータベース・インスタンス、またはコンテナ(CDB$ROOT,PDB)に SYS ユー ザーで接続します。接続後、統合監査証跡が出力されている UNIFIED_AUDIT_TRAIL ビューのレコード数を確認し
(任意)、ユーザーの別表にコピーします。
SQL> SELECT COUNT (*) from UNIFIED_AUDIT_TRAIL;
SQL> CREATE TABLE user_name.table_name AS SELECT * FROM
UNIFIED_AUDIT_TRAIL WHERE EVENT_TIMESTAMP < TRUNC(SYSDATE - days);
user_name, table_name, days に指定する値については、3.8.1(1)の表を参照ください。
以下は PDB の scott ユーザーに unified_audit_trail_copy 表を作成し、7 日前より古い監査証跡レコードをコピーす る場合の例です。
SQL> CREATE TABLE scott.unified_audit_trail_copy AS SELECT * FROM
UNIFIED_AUDIT_TRAIL WHERE EVENT_TIMESTAMP < TRUNC(SYSDATE - 7);
作成した表のレコード数を確認する、または作成した表を検索し、正しくコピーできていることを確認してください。
(2)一定期間経過した監査証跡レコードの削除
①アーカイブ済み日時の設定
何日前を最後のアーカイブ日時とするか、その日数を days に指定します。特に条件がない場合は (1)で指定した値を 指定します。
SQL> BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, LAST_ARCHIVE_TIME => TRUNC(SYSDATE - days),
CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);
END;
/
128
Copyright 2017-2019 FUJITSU LIMITED
②アーカイブ済みの監査証跡レコードの削除 SQL> BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, USE_LAST_ARCH_TIMESTAMP => TRUE);
END;
/
UNIFIED_AUDIT_TRAIL ビューのレコード数を確認する、またはビューを検索しアーカイブ済みの監査証跡レコードが削 除されていることを確認してください。レコード数を確認する SQL は(1)を参照ください。
(3)エクスポートによる別表の退避、および(4)別表の削除は、「3.8.1 標準監査証跡の退避と削除」の(3)(4)を参照くだ さい。
129
Copyright 2017-2019 FUJITSU LIMITED