演習: 共通統合監査ポリシーのためのSYSLOG宛先

この演習では、共通統合監査ポリシーのすべての監査レコードを1つの宛先に統合できるようにする方法を示します。構成に使用される新しい初期化パラメータはUNIXプラットフォームでのみサポートされ、Windowsでは使用できません。

  1. 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
  2. 共通統合監査ポリシーが1つの宛先に統合されるようにSYSLOG宛先を構成する前に、CDB20に対して/home/oracle/labs/M104781GC10/setup_SYSLOG_audit.shシェル・スクリプトを実行します。このシェル・スクリプトでは、共通ユーザーC##TESTを作成し、通常その共通ユーザーにCREATE SESSION権限とCREATE TABLE権限を付与します。
    $ cd /home/oracle/labs/M104781GC10
    $ /home/oracle/labs/M104781GC10/setup_SYSLOG_audit.sh
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Fri Mar 20 04:38:30 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> exit
    Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    
    Version 20.2.0.0.0
    
    LSNRCTL for Linux: Version 20.0.0.0.0 - Production on 20-MAR-2020 04:38:57
    
    Copyright (c) 1991, 2019, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.150.76.66)(PORT=1521)))
    The command completed successfully
    /usr/bin/ar cr /u01/app/oracle/product/20.2.0/dbhome_1/rdbms/lib/libknlopt.a /u01/app/oracle/product/20.2.0/dbhome_1/rdbms/lib/kzaiang.o
    chmod 755 /u01/app/oracle/product/20.2.0/dbhome_1/bin
    
     - Linking Oracle
    rm -f /u01/app/oracle/product/20.2.0/dbhome_1/rdbms/lib/oracle
    ...
    LSNRCTL for Linux: Version 20.0.0.0.0 - Production on 20-MAR-2020 04:39:09
    
    Copyright (c) 1991, 2019, Oracle.  All rights reserved.
    
    Starting /u01/app/oracle/product/20.2.0/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 20.0.0.0.0 - Production
    System parameter file is /u01/app/oracle/homes/OraDB20Home1/network/admin/listener.ora
    Log messages written to /u01/app/oracle/diag/tnslsnr/edcdr8p1/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.150.76.66)(PORT=1521)))
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.150.76.66)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 20.0.0.0.0 - Production
    Start Date                20-MAR-2020 04:39:09
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/homes/OraDB20Home1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/edcdr8p1/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.150.76.66)(PORT=1521)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
    The listener supports no services
    The command completed successfully
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Fri Mar 20 04:39:09 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> STARTUP
    ...
    SQL*Plus: Release 20.0.0.0.0 - Production on Tue Dec 24 02:34:44 2019
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2019, Oracle.  All rights reserved.
    
    Last Successful login time: Tue Dec 24 2019 02:31:07 +00:00
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    
    SQL> CREATE USER c##test IDENTIFIED BY password CONTAINER=ALL;
    
    User created.
    
    SQL> GRANT CREATE SESSION, CREATE TABLE TO c##test CONTAINER=ALL;
    
    Grant succeeded.
    
    SQL> EXIT
    $
  3. CDB20のCDBルートで共通およびローカルの監査ポリシーを作成し、PDB20のPDBレベルでローカル監査ポリシーを作成します。
    1. まず、CDB20のCDBルートで共通およびローカルの監査ポリシーを作成します。
      $ sqlplus / AS SYSDBA
      
      Connected.
      SQL> CREATE AUDIT POLICY pol_common ACTIONS create table CONTAINER=ALL;
      
      Audit policy created.
      
      SQL> AUDIT POLICY pol_common;
      
      Audit succeeded.
      
      SQL> CREATE AUDIT POLICY pol_root ACTIONS insert;
      
      Audit policy created.
      
      SQL> AUDIT POLICY pol_root;
      
      Audit succeeded.
      
      SQL> COL policy_name FORMAT A18
      SQL> COL audit_option FORMAT A18
      SQL> SELECT policy_name, audit_option, common
            FROM AUDIT_UNIFIED_POLICIES  
            WHERE policy_name like 'POL%'; 
      
      POLICY_NAME        AUDIT_OPTION       COM
      ------------------ ------------------ ---
      POL_COMMON         CREATE TABLE       YES
      POL_ROOT           INSERT             NO
      
      SQL>
    2. PDB20のPDBレベルでローカル監査ポリシーを作成します。
      SQL> CONNECT system@PDB20
      Enter password: password
      Connected.
      SQL> CREATE AUDIT POLICY pol_pdb20 ACTIONS select;
      
      Audit policy created.
      
      SQL> AUDIT POLICY pol_pdb20;
      
      Audit succeeded.
      
      SQL>
    3. ポリシー名と、そのアクションおよび共通性を表示します。
      SQL> COL policy_name FORMAT A18
      SQL> COL audit_option FORMAT A18
      SQL> SELECT policy_name, audit_option, common
            FROM AUDIT_UNIFIED_POLICIES  
            WHERE policy_name like 'POL%'; 
      
      POLICY_NAME        AUDIT_OPTION       COM
      ------------------ ------------------ ---
      POL_COMMON         CREATE TABLE       YES
      POL_PDB20          SELECT             NO
      
      SQL>
  4. 共通統合監査ポリシーが1つの宛先に統合されるようにSYSLOG宛先を構成します。facility_clauseは、監査証跡レコードを書き込む機能を指定します。有効な選択肢はUSERおよびLOCALです。LOCALと入力する場合は、必要に応じて0–7を後ろに付け、SYSLOGレコードのローカル・カスタム機能を指定します。priority_clauseは、レコードを分類する警告のタイプを指定します。有効な選択肢は、NOTICEINFODEBUGWARNINGERRCRITALERTおよびEMERGです。
    SQL> CONNECT / AS SYSDBA
    Connected.
    SQL> ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG='local0.info' SCOPE=SPFILE;
    
    System altered.
    
    SQL>
  5. ローカル統合監査ポリシーが1つの宛先に統合されるようにSYSLOG宛先を構成します。
    SQL> CONNECT sys@PDB20 AS SYSDBA
    Enter password: password
    Connected.
    SQL> ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG='local1.warning' SCOPE=SPFILE;
    ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG='local1.warning'  SCOPE=SPFILE
    *
    ERROR at line 1:
    ORA-65040: operation not allowed from within a pluggable database
    
    SQL> CONNECT / AS SYSDBA
    Connected.
    SQL> ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG='local1.warning' SCOPE=SPFILE;
    
    System altered.
    
    SQL>

    UNIFIED_AUDIT_COMMON_SYSTEMLOGがCDBレベルのinit.oraパラメータであることに注目します。

  6. 初期化パラメータUNIFIED_AUDIT_COMMON_SYSTEMLOGSPFILEスコープで設定されているため、データベース・インスタンスを再起動します。
    SQL> SHUTDOWN IMMEDIATE
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> STARTUP
    ORACLE instance started.
    
    Total System Global Area 1426061008 bytes
    Fixed Size                  9565904 bytes
    Variable Size             889192448 bytes
    Database Buffers          520093696 bytes
    Redo Buffers                7208960 bytes
    Database mounted.
    Database opened.
    SQL> ALTER PLUGGABLE DATABASE pdb20 OPEN;
    
    Pluggable database altered.
    
    SQL> 
  7. SYSLOGシステムによって監査アクションが記録される前に、監査レコードを格納するためのOSディレクトリをSYSLOGファイルに定義します。別のターミナル・セッションを開きます。
    1. rootとしてログインします。
      $ sudo su
      #
    2. /etc/rsyslog.conf構成ファイルを編集し、RULESセクションで、SYSTEMLOGのCDBで定義されている様々な値と同じ数の行を追加して、関連するOSディレクトリを指定します。
      # vi /etc/rsyslog.conf
      ...
      #### RULES ####
      ...
      # Save boot messages also to boot.log
      local7.*                                                /var/log/boot.log
      
      # Unified Audit Rules
      local0.info            /var/log/root_common_audit_records.log
      local1.warning         /var/log/root_audit_records.log
      ...
      #
    3. SYSLOGデーモンを再起動します。
      # cd /etc/init.d
      # service rsyslog restart
      Redirecting to /bin/systemctl restart  rsyslog.service
      # 
  8. oracle UNIXセッションで、共通ユーザーC##TESTとしてCDBルートにログオンし、CREATE TABLE操作を実行した後、作成された表に対してINSERT操作を実行します。
    SQL> CONNECT c##test
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Fri Mar 20 05:44:04 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
    
    Enter password: password
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    
    SQL> ALTER SESSION SET default_sharing = 'EXTENDED DATA';
    
    Session altered.
    
    SQL> CREATE TABLE test (id NUMBER, label VARCHAR2(10));
    
    Table created.
    
    SQL> INSERT INTO test VALUES (1,'A');
    
    1 row created.COMMIT;
    
    SQL> INSERT INTO test VALUES (2,'B');
    
    1 row created.
    
    SQL> COMMIT;
    
    Commit complete.
    
    SQL>
  9. root UNIXセッションに戻り、共通監査ポリシーPOL_COMMONによってCREATE TABLEの監査レコードが生成されたため、syslogエントリが/var/log/root_common_audit_records.logファイルに作成されていることを確認します。
    # cat /var/log/root_common_audit_records.log
    Mar 20 08:51:55 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"1" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    #

    POL_COMMON監査ポリシーではすべてのコンテナ内ですべてのCREATE TABLE文を監査するため、唯一のエントリは一般的に監査されるCREATE TABLEアクションに対応しています。INSERT文を監査する監査ポリシーPOL_ROOTはCDBルートでローカルにのみ有効になっているため、INSERTアクションはこのログ・ファイルに記録されません。

  10. ローカル・ルート監査ポリシーPOL_ROOTによってINSERTの監査レコードが生成されたため、syslogエントリが/var/log/root_audit_records.logファイルに作成されていることを確認します。
    # cat /var/log/root_audit_records.log
    Mar 20 08:51:55 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"1" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    Mar 20 08:51:58 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"2" STMTID:"9" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"2" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    Mar 20 08:52:11 your_server journal: Oracle Unified Audit[9653]: LENGTH: '215' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"3" STMTID:"10" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"2" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    #

    最初のエントリは、一般的に、またCDBルートでローカルにも監査されるCREATE TABLEアクションに対応しています。INSERT文を監査する監査ポリシーPOL_ROOTはCDBルートでローカルに有効になっているため、2番目と3番目のエントリはこのログ・ファイルに記録される2つのINSERTアクションに対応しています。

  11. oracle UNIXセッションに戻り、共通ユーザーC##TESTとしてPDB PDB20にログオンし、CREATE TABLE操作を実行した後、作成された表に対してINSERT操作を実行します。
    SQL> CONNECT c##test@PDB20
    Enter password: password
    Connected.
    SQL> CREATE TABLE testpdb20 (id NUMBER, label VARCHAR2(10));
    
    Table created.
    
    SQL> INSERT INTO testpdb20 VALUES (1,'A');
    
    1 row created.
    
    SQL> INSERT INTO testpdb20 VALUES (2,'B');
    
    1 row created.
    
    SQL> COMMIT;
    
    Commit complete.
    
    SQL> EXIT
    $
  12. root UNIXセッションに戻り、syslogエントリが/var/log/root_common_audit_records.logファイルに作成されているかどうかを確認します。
    # cat /var/log/root_common_audit_records.log
    Mar 20 08:51:55 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"1" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    Mar 20 09:02:48 your_server journal: Oracle Unified Audit[16023]: LENGTH: '218' TYPE:"4" DBID:"79515510" SESID:"3581432176" CLIENTID:"" ENTRYID:"2" STMTID:"7" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"1" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TESTPDB20" PDB_GUID:"A12EDF03A4B47886E053424C960AD028"
    #

    共通監査ポリシーPOL_COMMONではすべてのコンテナ内とPDB20内でもすべてのCREATE TABLE文を監査するため、2番目のエントリは一般的に監査されるCREATE TABLEアクションに対応しています。INSERT文を監査する監査ポリシーPOL_ROOTはCDBルートでローカルにのみ作成され、すべてのコンテナで一般的には作成されないため、INSERTアクションはこのログ・ファイルに記録されません。

  13. syslogエントリが/var/log/root_audit_records.logファイルに作成されているかどうかを確認します。
    # cat /var/log/root_audit_records.log
    ...
    Mar 20 08:51:55 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"1" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    Mar 20 08:51:58 your_server journal: Oracle Unified Audit[9653]: LENGTH: '214' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"2" STMTID:"9" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"2" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    Mar 20 08:52:11 your_server journal: Oracle Unified Audit[9653]: LENGTH: '215' TYPE:"4" DBID:"2739122757" SESID:"112109882" CLIENTID:"" ENTRYID:"3" STMTID:"10" DBUSER:"C##TEST" CURUSER:"C##TEST" ACTION:"2" RETCODE:"0" SCHEMA:"C##TEST" OBJNAME:"TEST" PDB_GUID:"9DF89CC354CB1655E0538EE0E40A712F"
    ...
    # exit
    exit
    $ exit

    PDB20のローカル監査ポリシーPOL_PDB20ではINSERTアクションを監査しますが、SYSLOGではCDBレベルで実行されたアクションのみを記録するため、監査レコードはSYSLOGファイルに書き込まれません。