統合監査機能の過剰監査ファイルを試す（Oracle Database 19c）

# 過剰監査ファイル
「過剰監査ファイル」は Oracle Database の統合監査（Unified Auditing）機能の一部です。英文のマニュアルでは「Spillover audit files」と書かれています。

- [セキュリティ・ガイド（日本語版）](https://docs.oracle.com/cd/F19136_01/dbseg/administering-the-audit-trail.html#GUID-98108374-C053-4168-8A77-C567810DAD50)
- [セキュリティ・ガイド（英語版）](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/administering-the-audit-trail.html#GUID-98108374-C053-4168-8A77-C567810DAD50)

統合監査の監査証跡は AUDSYS スキーマの AUD$UNIFIED テーブルに保存され、データベース管理者は監査証跡を UNIFIED_AUDIT_TRAIL ビューを経由して参照します。しかし Active Data Guard スタンバイ・インスタンスのように Read Only モードで起動したインスタンス等ではテーブルに書き込むことができません。このような場合の監査証跡はオペレーティング・システム上のファイルに作成されます。このファイルは過剰監査ファイルと呼びます。

## 過剰監査ファイルの出力先
　マルチテナント環境の CDB や非マルチテナント環境の過剰監査ファイルは \$ORACLE_BASE/audit ディレクトリに作成されます。

```SQL: 過剰監査ファイルの確認
$ cd $ORACLE_BASE/audit
$ ls -l ora_audit*
-rw------- 1 oracle asmadmin 1536 Feb  6 15:38 ora_audit_0149.bin
-rw------- 1 oracle asmadmin 1536 Feb  6 13:50 ora_audit_0274.bin
$
```

　PDB の過剰監査ファイルは、\\$ORACLE_BASE/audit/{ORACLE_SID}/{GUID} ディレクトリに作成されます。{GUID} は PDB に割り当てられた ID で V$PDBS ビューの GUID 列で確認できます、

```SQL: PDB の GUID 確認
SQL> SELECT name, guid FROM v$pdbs ORDER BY 1;

NAME                 GUID
-------------------- --------------------------------
PDB$SEED             0037AAB2C22E9E08E0638301A8C00FF9
PDB1                 00384AF2A3D4C878E0638401A8C0E37E
PDB2                 00384D01446954D9E0638301A8C0BA0F
```

```shell: PDB pdb1 の過剰監査ファイル確認
$ cd $ORACLE_BASE/audit/O19A
$ ls 
00384AF2A3D4C878E0638401A8C0E37E
$ cd 00384AF2A3D4C878E0638401A8C0E37E
$ ls
ora_audit_0275.bin
```

## 過剰監査ファイルの名前
過剰監査ファイルのファイル名は「ora_audit_{番号}.bin」です。番号部分は内部IDとセッションIDから構成されますがマニュアルには明示されていないようです（DocID: 2846293.1）

## 過剰監査ファイルの内容
過剰監査ファイルを直接参照することは想定されていないため、バイナリ形式で格納されています。ただし暗号化等は行われておらず、SQL 文や監査ポリシー名等はそのまま格納されています。

```shell: 過剰監査ファイルの内容を参照

$ cd $ORACLE_BASE/audit/O19A/00384AF2A3D4C878E0638401A8C0E37E
$ strings ora_audit_0275.bin
ANG Spillover Audit File
ORAAUDNG
oracle
rel88-1
pts/1
(TYPE=(DATABASE));(CLIENT ADDRESS=((ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.200)(PORT=39116))));(CLIENT ADDRESS=());
SCOTT
sqlplus@rel88-1 (TNS V1-V3)
`6L"
104405
SCOTT
DATA1
SELECT COUNT(*) FROM data1
POLICY1
SCOTT
$
```

## 過剰監査ファイルの参照
過剰監査ファイルの内容は通常と同じように unified_audit_trail ビューを参照します。

```SQL: 監査証跡の参照
SQL> ALTER SESSION SET CONTAINER=PDB1;

セッションが変更されました。

SQL> SELECT object_name, sql_text FROM unified_audit_trail WHERE dbusername='SCOTT';

OBJECT_NAME                    SQL_TEXT
------------------------------ ------------------------------------------------------------
DATA1                          SELECT COUNT(*) FROM data1
```

## 過剰監査ファイルの移動
出力された過剰監査ファイルは書き込み可能な状態になったら AUDSYS.AUD$UNIFIED テーブルにインポートすることができます。DBMS_AUDIT_MGMT パッケージの [LOAD_UNIFIED_AUDIT_FILES プロシージャ](https://docs.oracle.com/cd/F19136_01/arpls/DBMS_AUDIT_MGMT.html#GUID-8D4ED460-6DC0-4267-AB65-5E558D896FF9)を実行します。

```SQL: 過剰監査ファイルのロード
SQL> SELECT COUNT(*) FROM audsys.aud$unified;

  COUNT(*)
----------
         1

SQL> BEGIN
  2    DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES (
  3      CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT
  4    );
  5  END;
  6  /

PL/SQLプロシージャが正常に完了しました。

SQL> SELECT COUNT(*) FROM audsys.aud$unified;

  COUNT(*)
----------
         2
```

マニュアル上には load_batch_size パラメーターの定義が書かれていますが、実際には container パラメーターしか存在しません（RU 19.14 適用環境）。


## 過剰監査ファイルが作成できない場合
インスタンス起動時点で過剰監査ファイルが作成できない場合でもインスタンスは正常に起動します。

```shell:
$ cd $ORACLE_BASE/audit/
$ chmod ug-x o19a
$ srvctl start database -db o19a
$ sqlplus / as sysdba
SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
OPEN
```

しかしアラートファイルには以下のエラーが出力されます。

```
2024-02-06T16:46:29.270270+09:00
Errors in file /u01/app/oracle/diag/rdbms/o19a/o19a1/trace/o19a1_ora_105949.trc:
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 13: Permission denied
Additional information: 4
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 13: Permission denied
Additional information: 9
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 13: Permission denied
Additional information: 9
```

また監査証跡が出力できない状態では新規のクライアント接続はエラーになります。

```shell
$ sqlplus scott/tiger@re88-1:1521/pdb1

SQL*Plus: Release 19.0.0.0.0 - Production on 火 2月 6 16:51:16 2024
Version 19.14.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

ERROR:
ORA-48189: OS command to create directory failed
Linux-x86_64 Error: 13: Permission denied
Additional information: 2
ORA-46364: Audit directory
'/u01/app/oracle/audit/o19a1/00384AF2A3D4C878E0638401A8C0E37E/' could not be
created.
ORA-48189: OS command to create directory failed
Linux-x86_64 Error: 13: Permission denied
Additional information: 2
ORA-46364: Audit directory
'/u01/app/oracle/audit/o19a1/00384AF2A3D4C878E0638401A8C0E37E/' could not be
created.


ユーザー名を入力してください:
```

Author: Noriyoshi Shinoda / Date: February 6, 2024