Oracle Database 18c 以降のバージョンでは統合監査のデータを SYSLOG (RSYSLOG) に転送する機能を持っています。
統合監査
統合監査は、Oracle Database 11g までの監査(標準監査と呼びます)、ファイングレイン監査、DBA監査等複数あった監査方式を一本化(=UNIFIED)した監査方法です。Oracle Database 19c では標準の監査方法になっています。標準では統合監査の出力結果は AUDSYS スキーマの AUD$UNIFIED テーブルに保存されます。このテーブルは時間隔パーティション・テーブル(INTERVAL PARTITION TABLE)になっています。
SQL> SELECT TABLE_NAME, PARTITIONING_TYPE, PARTITION_COUNT FROM DBA_PART_TABLES WHERE TABLE_NAME='AUD$UNIFIED';
TABLE_NAME PARTITION PARTITION_COUNT
------------------------------ --------- ---------------
AUD$UNIFIED RANGE 1048575
SQL> SELECT TABLE_NAME, PARTITION_NAME, TABLESPACE_NAME FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='AUDSYS';
TABLE_NAME PARTITION_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
AUD$UNIFIED AUD_UNIFIED_P0 SYSAUX
AUD$UNIFIED SYS_P1035 SYSAUX
AUD$UNIFIED SYS_P1062 SYSAUX
AUD$UNIFIED SYS_P1122 SYSAUX
AUD$UNIFIED SYS_P1162 SYSAUX
AUD$UNIFIED SYS_P561 SYSAUX
AUD$UNIFIED SYS_P825 SYSAUX
AUD$UNIFIED SYS_P881 SYSAUX
8行が選択されました。
データベース管理者は監査データを確認するために UNIFIED_AUDIT_TRAIL ビューを参照します。実行計画を確認すると AUDSYS.AUD$UNIFIED テーブルを参照していることがわかります。
SQL> SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL;
COUNT(*)
----------
2009
実行計画
----------------------------------------------------------
Plan hash value: 1799673015
----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
----------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 74 (0)| 00:00:01 | | |
| 1 | SORT AGGREGATE | | 1 | | | | | |
| 2 | VIEW | UNIFIED_AUDIT_TRAIL | 1967 | | 74 (0)| 00:00:01 | | |
| 3 | UNION-ALL | | | | | | | |
| 4 | NESTED LOOPS OUTER | | 1 | 68 | 2 (0)| 00:00:01 | | |
| 5 | NESTED LOOPS OUTER | | 1 | 64 | 1 (0)| 00:00:01 | | |
| 6 | NESTED LOOPS | | 1 | 59 | 0 (0)| 00:00:01 | | |
| 7 | FIXED TABLE FULL | X$UNIFIED_AUDIT_TRAIL | 1 | 52 | | | | |
|* 8 | INDEX UNIQUE SCAN | I_UNIFIED_AUDIT_ACTIONS | 1 | 7 | 0 (0)| 00:00:01 | | |
|* 9 | INDEX RANGE SCAN | I_SYSTEM_PRIVILEGE_MAP | 1 | 5 | 1 (0)| 00:00:01 | | |
|* 10 | INDEX RANGE SCAN | I_STMT_AUDIT_OPTION_MAP | 1 | 4 | 1 (0)| 00:00:01 | | |
| 11 | NESTED LOOPS | | 1966 | 53082 | 72 (0)| 00:00:01 | | |
|* 12 | HASH JOIN RIGHT OUTER | | 1966 | 39320 | 72 (0)| 00:00:01 | | |
| 13 | INDEX FAST FULL SCAN | I_STMT_AUDIT_OPTION_MAP | 337 | 1348 | 2 (0)| 00:00:01 | | |
|* 14 | HASH JOIN RIGHT OUTER| | 1966 | 31456 | 70 (0)| 00:00:01 | | |
| 15 | INDEX FAST FULL SCAN| I_SYSTEM_PRIVILEGE_MAP | 257 | 1285 | 2 (0)| 00:00:01 | | |
| 16 | PARTITION RANGE ALL | | 1966 | 21626 | 68 (0)| 00:00:01 | 1 |1048575|
| 17 | TABLE ACCESS FULL | AUD$UNIFIED | 1966 | 21626 | 68 (0)| 00:00:01 | 1 |1048575|
|* 18 | INDEX UNIQUE SCAN | I_UNIFIED_AUDIT_ACTIONS | 1 | 7 | 0 (0)| 00:00:01 | | |
----------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
8 - access("AUDIT_TYPE"="ACT"."TYPE" AND "ACTION"="ACT"."ACTION")
9 - access("SPX"."PRIVILEGE"(+)=(-"SYSTEM_PRIVILEGE"))
10 - access("AUDIT_OPTION"="AOM"."OPTION#"(+))
12 - access("AUDUNI"."AUDIT_OPTION"="AOM1"."OPTION#"(+))
14 - access("SPX1"."PRIVILEGE"(+)=(-"AUDUNI"."SYSTEM_PRIVILEGE"))
18 - access("AUDUNI"."AUDIT_TYPE"="ACT1"."TYPE" AND "AUDUNI"."ACTION"="ACT1"."ACTION")
現在有効な統合監査のポリシーは AUDIT_UNIFIED_ENABLED_POLICIES ビューから確認できます。下記の例では Oracle Database 19c 標準の監査ポリシーが確認できます。
SQL> SELECT * FROM AUDIT_UNIFIED_ENABLED_POLICIES;
POLICY_NAME ENABLED_OPTION ENTITY_NAME ENTITY_ SUC FAI
------------------------------ --------------- ------------------------------ ------- --- ---
ORA_SECURECONFIG BY USER ALL USERS USER YES YES
ORA_LOGON_FAILURES BY USER ALL USERS USER NO YES
本記事では Linux 環境で統合監査の設定を SYSLOG (RSYSLOG) に転送する方法と出力例について記載しています。
SYSLOGへの転送
統合監査情報を SYSLOG へ転送するには以下の2つの初期化パラメーターを使います。
- UNIFIED_AUDIT_COMMON_SYSTEMLOG
マニュアルの記載は以下の通りです。
UNIFIED_AUDIT_COMMON_SYSTEMLOGには、共通監査ポリシーによって生成された統合監査レコードのキー・フィールドがSYSLOGユーティリティに書き込まれるかどうかを指定します。
共通監査ポリシーは「CONTAINER=ALL」を指定したポリシーを指します。
- UNIFIED_AUDIT_SYSTEMLOG
マニュアルの記載は以下の通りです。
UNIFIED_AUDIT_SYSTEMLOGには、統合監査レコードのキー・フィールドをSYSLOGユーティリティ(UNIXプラットフォームの場合)に書き込むのか、Windowsイベントビューア(Windowsの場合)に書き込むのかを指定します。CDBでは、このパラメータはPDBごとの静的初期化パラメータです。
こちらはPDB単位に出力する設定です。
PDBに対する設定例
特定の PDB に対して統合監査データを SYSLOG 転送する例です。
監査設定は変わらないので、統合監査ポリシーを設定します。ここでは SCOTT ユーザーの DATA1 テーブルに対する DML アクセスの監査を行います。
SQL> ALTER SESSION SET CONTAINER=pdb1;
セッションが変更されました。
SQL> CREATE AUDIT POLICY policy1 ACTIONS ALL ON scott.data1;
監査ポリシーが作成されました。
SQL> AUDIT POLICY policy1;
監査が成功しました。
SQL> SELECT * from audit_unified_enabled_policies;
POLICY_NAME ENABLED_OPTION ENTITY_NAME ENTITY_ SUC FAI
------------------------------ --------------- ------------------------------ ------- --- ---
ORA_SECURECONFIG BY USER ALL USERS USER YES YES
ORA_LOGON_FAILURES BY USER ALL USERS USER NO YES
POLICY1 BY USER ALL USERS USER YES YES
PDB の初期化パラメーター unified_audit_systemlog を変更します。ファシリティ名とプライオリティをドット(.)で接続した文字列を指定します。以下の例ではファシリティに「LOCAL3」、プライオリティに「INFO」を指定しています。PDB の再起動を行い、初期化パラメーターを有効化しています。
SQL> ALTER SYSTEM SET unified_audit_systemlog = 'LOCAL3.INFO' SCOPE=SPFILE;
システムが変更されました。
SQL> ALTER PLUGGABLE DATABASE pdb1 CLOSE;
プラガブル・データベースが変更されました。
SQL> ALTER PLUGGABLE DATABASE pdb1 OPEN;
プラガブル・データベースが変更されました。
出力された監査設定例を確認します。以下の例では監査設定は /var/log/oradbaudit.log ファイルに出力される設定になっています(/etc/rsyslog.conf ファイルで設定)。
# grep -i local3 /etc/rsyslog.conf
local3.info /var/log/oradbaudit.log
# cat /var/log/oradbaudit.log
Jan 31 16:33:31 rel88-1 journal: Oracle Unified Audit[17345]: LENGTH: '210' TYPE:"4" DBID:"1623664111" SESID:"1736818950" CLIENTID:"" ENTRYID:"1" STMTID:"7" DBUSER:"SCOTT" CURUSER:"SCOTT" ACTION:"3" RETCODE:"0" SCHEMA:"SCOTT" OBJNAME:"DATA1" PDB_GUID:"00384AF2A3D4C878E0638401A8C0E37E"
Jan 31 16:34:00 rel88-1 journal: Oracle Unified Audit[17345]: LENGTH: '210' TYPE:"4" DBID:"1623664111" SESID:"1736818950" CLIENTID:"" ENTRYID:"2" STMTID:"8" DBUSER:"SCOTT" CURUSER:"SCOTT" ACTION:"2" RETCODE:"0" SCHEMA:"SCOTT" OBJNAME:"DATA1" PDB_GUID:"00384AF2A3D4C878E0638401A8C0E37E"
Jan 31 16:40:13 rel88-1 journal: Oracle Unified Audit[36323]: LENGTH: '197' TYPE:"4" DBID:"1623664111" SESID:"1200097683" CLIENTID:"" ENTRYID:"1" STMTID:"1" DBUSER:"SYS" CURUSER:"SYS" ACTION:"49" RETCODE:"0" SCHEMA:"" OBJNAME:"" PDB_GUID:"00384AF2A3D4C878E0638401A8C0E37E"
Jan 31 16:40:34 rel88-1 journal: Oracle Unified Audit[36323]: LENGTH: '202' TYPE:"4" DBID:"1623664111" SESID:"4200562405" CLIENTID:"" ENTRYID:"2" STMTID:"3" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1" PDB_GUID:"00384AF2A3D4C878E0638401A8C0E37E"
SYSLOG 転送設定を行ったからといって、監査証跡が保存されないわけではありません。SYSLOG 転送されるのはキー部分のみになります。このため unified_audit_trail ビューを検索すると作成したポリシーの監査データが取得できます。
SQL> SELECT OBJECT_NAME,DBUSERNAME,ACTION_NAME FROM unified_audit_trail WHERE UNIFIED_AUDIT_POLICIES='POLICY1';
OBJECT_NAME DBUSERNAME ACTION_NAME
-------------------- ------------------------------ --------------------
DATA1 SCOTT INSERT
DATA1 SCOTT SELECT
DATA1 SYS SELECT
Author: Noriyoshi Shinoda / Date: January 31, 2024