Oracle Database 標準監査データを SYSLOG 転送する（Oracle Database 19c)

Oracle Database には標準監査データを SYSLOG (RSYSLOG) に転送する機能を持っています。本記事では、Oracle Database の設定と、Oracle Grid Infrastructure の設定について記述します。

# Oracle Database の出力
　SYSLOGを使った監査データの収集は、SYSユーザー監査と標準監査です。初期化パラメーター audit_trail を OS に設定し、初期化パラメーター audit_syslog_level にレベルを指定します。以下は標準監査とSYSユーザー監査に関係する初期化パラメーターの説明と確認内容です。

|初期化パラメーター|デフォルト値|説明|
|:---|:---|:---|
|audit_trail|none|標準監査の出力先を指定、デフォルト値はnoneだが、DBCAでデータベースを作成する場合はDBになる|
|audit_sys_operation|TRUE|SYSユーザーの監査を行うかを指定|
|audit_file_dest|$ORACLE_HOME/dbms/audit|監査データの出力ディレクトリ |
|audit_syslog_level| |監査データをSYSLOGに転送する際の出力レベル|

```SQL:
SQL> SHOW PARAMETER audit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------------------------------------------
audit_file_dest                      string      /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/audit
audit_sys_operations                 boolean     TRUE
audit_syslog_level                   string      LOCAL3.INFO
audit_trail                          string      OS
unified_audit_common_systemlog       string
unified_audit_sga_queue_size         integer     1048576
unified_audit_systemlog              string
```

上記の場合、初期化パラメーター audit_syslog_level に local3.info が指定されています。SYSLOG出力を行うには /etc/rsyslog.conf に監査データの出力設定を行い、rsyslogd を再起動します。

```shell:
# grep local3.info /etc/rsyslog.conf
local3.info                     /var/log/oradbaudit.log
# systemctl stop rsyslogd
# systemctl start rsyslogd
```

## SYSLOG出力例

以下の例はデータベースに対して SYSDBA 接続を行った場合の SYSLOG です。
```
Mar 17 09:52:54 rel78-7 journal: Oracle Audit[36190]: LENGTH : '254' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/0' STATUS:[1] '0' DBID:[9] '377954733' SESSIONID:[10] '4294967295' USERHOST:[7] 'rel78-7' CLIENT ADDRESS:[0] '' ACTION NUMBER:[3] '100'
Mar 17 09:52:54 rel78-7 journal: Oracle Audit[36190]: LENGTH : '252' ACTION :[6] 'COMMIT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/0' STATUS:[1] '0' DBID:[9] '377954733' SESSIONID:[10] '4294967295' USERHOST:[7] 'rel78-7' CLIENT ADDRESS:[0] '' ACTION NUMBER:[2] '44'
Mar 17 09:52:54 rel78-7 journal: Oracle Audit[36190]: LENGTH : '252' ACTION :[6] 'COMMIT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/0' STATUS:[1] '0' DBID:[9] '377954733' SESSIONID:[10] '4294967295' USERHOST:[7] 'rel78-7' CLIENT ADDRESS:[0] '' ACTION NUMBER:[2] '44'
```

以下の例は標準監査で AUDIT SESSION 文を実行後に一般ユーザーSCOTTで接続した例です。

```
Mar 17 10:00:46 rel78-7 journal: Oracle Audit[41361]: LENGTH: "223" SESSIONID:[7] "6673173" ENTRYID:[1] "1" USERID:[5] "SCOTT" ACTION:[3] "101" RETURNCODE:[1] "0" LOGOFF$PREAD:[1] "0" LOGOFF$LREAD:[4] "1089" LOGOFF$LWRITE:[1] "8" LOGOFF$DEAD:[1] "0" DBID:[9] "377954733" SESSIONCPU:[1] "5"
Mar 17 10:00:46 rel78-7 journal: Oracle Audit[41392]: LENGTH: "322" SESSIONID:[7] "6693173" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[5] "SCOTT" USERHOST:[7] "rel78-7" TERMINAL:[5] "pts/0" ACTION:[3] "100" RETURNCODE:[1] "0" COMMENT$TEXT:[56] "Authenticated by: DATABASE;AUTHENTICATED IDENTITY: SCOTT" OS$USERID:[6] "oracle" DBID:[9] "377954733" PRIV$USED:[1] "5" CURRENT_USER:[5] "SCOTT"
```

# Oracle Grid Infrastructure の設定
ASMインスタンスにも Oracle Database と同様の初期化パラメーターが設定できます。
Oracle Database 19c (+RU 19.14) 環境では ASM インスタンスの監査関係初期化パラメーターは以下のようになっていました。

```SQL:
SQL> SHOW PARAMETER audit
NAME                                 TYPE               VALUE
------------------------------------ ------------------ --------------------------------
audit_file_dest                      string             /u01/app/19.0.0/grid/rdbms/audit
audit_sys_operations                 boolean            TRUE
audit_syslog_level                   string             LOCAL0.INFO
audit_trail                          string             NONE
unified_audit_sga_queue_size         integer            1048576
```

インストール時には特に設定していませんでしたが、audit_syslog_level に LOCAL0.INFO が追加されています。
Oracle Grid Infrastructure インストール時に実行する root.sh　スクリプトにより /etc/rsyslog.conf も自動的に修正され、以下の設定が追加されます。

``` SHELL
# grep ora /etc/rsyslog.conf
local0.info                     /var/log/oraasmaudit.log
local1.info                     /var/log/oraiosaudit.log
local2.info                     /var/log/oraapxaudit.log
```

## SYSLOG出力例
以下は ASM インスタンスに sysasm 権限で接続した時に出力される syslog メッセージです。初期化パラメーター audit_trail は設定されていないにも関わらず ASM インスタンスへの接続はログが出力されています。

```:oraasmaudit.log
Mar 17 09:45:12 rel78-7 journal: Oracle Audit[30419]: LENGTH : '243' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSASM' CLIENT USER:[4] 'grid' CLIENT TERMINAL:[5] 'pts/1' STATUS:[1] '0' DBID:[0] '' SESSIONID:[10] '4294967295' USERHOST:[7] 'rel85-1' CLIENT ADDRESS:[0] '' ACTION NUMBER:[3] '100'
```

Author: Noriyoshi Shinoda / Date: March 17, 2023