Controllo del database Oracle in Bare Metal Solution Oracle

Panoramica

Il controllo del database è il processo di registrazione, monitoraggio e generazione di report sulle azioni eseguite su un database. Consente ai revisori della sicurezza di osservare se gli utenti del database lo utilizzano in base ai criteri stabiliti e se non ci sono violazioni dei criteri.

Il database Oracle ospitato sul server Bare Metal Solution supporta tutte le procedure di auditing standard di Oracle come ambiente on-premise senza limitazioni. Devi configurare i criteri di controllo in base ai requisiti della tua attività.

Questa pagina illustra i criteri di controllo supportati in Oracle Bare Metal Solution e la gestione degli audit log. Questa pagina illustra anche come utilizzare il bucket Cloud Storage per archiviare gli audit log precedenti, se necessario.

1. Controllare le operazioni degli utenti SYS

Questa sezione può essere utilizzata come riferimento dagli amministratori di database che vogliono eseguire attività di audit sulle attività svolte da SYS/SYSDBA/SYSOPER.

Il parametro audit_sys_operations consente il controllo di tutte le istruzioni emesse da SYS/SYSDBA/SYSOPER in un file di traccia di controllo OS. Per attivare il controllo da parte degli utenti SYS, devi impostare il parametro audit_sys_operations su TRUE.

SQL> show parameter audit

NAME                     TYPE                VALUE
------------------------------------ ------------------------------
audit_file_dest              string  /apps/oracle/oracle_base/admin
                         /dbrman/adump
audit_sys_operations             boolean     TRUE
audit_syslog_level           string
audit_trail              string  DB
unified_audit_common_systemlog       string
unified_audit_sga_queue_size         integer     1048576
unified_audit_systemlog          string

Dopo aver impostato il parametro audit_sys_operations, tutti i dettagli dei controlli a livello di sistema sono disponibili nei file di controllo nella posizione della directory specificata da audit_file_dest.

L'esempio seguente mostra come creare un utente di esempio da sys.

[oracle@svr002 adump]$ sqlplus / as sysdba

SQL> create user audit_test identified by abcd1234;

Cerca i log di controllo pertinenti nella directory audit_file_dest. In questo esempio sono presenti due operazioni sottoposte a controllo (connessione e creazione utente), eseguite dall'utente del database / con l'utente del sistema operativo oracle e il privilegio sysdba.

[oracle@svr002 ~]$ cd /apps/oracle/oracle_base/admin/dbrman/adump
[oracle@svr002 adump]$ ls -ltr
[oracle@svr002 adump]$ more dbrman_ora_12088_20211113064923842865549602.aud
Fri Nov 13 06:49:23 2021 +00:00
LENGTH : '268'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/4'
STATUS:[1] '0'
DBID:[10] '3990895662'
SESSIONID:[10] '4294967295'
USERHOST:[17] 'svr002'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

Fri Nov 13 06:49:55 2021 +00:00
LENGTH : '299'
ACTION :[38] 'create user audit_test identified by *'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/4'
STATUS:[1] '0'
DBID:[10] '3990895662'
SESSIONID:[10] '4294967295'
USERHOST:[17] 'svr002'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '51'

2. Controllo standard del database

Il controllo è abilitato per impostazione predefinita a partire dalla versione 11g. Il controllo del database viene configurato impostando il parametro audit_trail su uno dei valori riportati nella tabella seguente:

Parametro Descrizione
NESSUNO Il controllo è disabilitato
DB Il controllo è abilitato e i dati di controllo vengono scritti nella tabella SYS.AUD$
DB,EXTENDED Si comporta come un database, ma compila anche le colonne SQL_TEXT e SQL_BIND
Sistema operativo Il controllo è abilitato. Su Unix, i dati di controllo vengono scritti in file di testo che si trovano nella directory specificata tramite audit_file_dest. Su Windows, i dati di controllo verranno inviati al Visualizzatore eventi.
XML Il controllo è abilitato e i dati di controllo vengono scritti in file XML che si trovano nella directory specificata tramite audit_file_dest. Questo vale sia per Windows che per Unix.
XML,EXTENDED Si comporta come XML, ma compila anche le colonne SQL_TEXT e SQL_BIND.

Puoi impostare audit_trail su una delle opzioni precedenti in base ai tuoi requisiti e controllare le attività sottoposte a controllo dalle tabelle SYS.AUD$ o dai file di controllo generati nella directory audit_file_dest.

Nell'esempio seguente, tutto il controllo delle istruzioni è abilitato dall'utente audit_test e vengono registrate tutte le operazioni eseguite dall'utente.

SQL> audit create table by audit_test;
Audit succeeded.
SQL> audit all by audit_test by access;

Audit succeeded.

SQL> conn audit_test
Enter password:
Connected.
SQL> show user
USER is "AUDIT_TEST"
SQL>
SQL> create table test (name char);

Table created.

SQL> insert into test values ('a');

1 row created.

SQL> exit

[oracle@svr002 adump]$ sqlplus / as sysdba

SQL> SELECT username,extended_timestamp,owner,obj_name,action_name FROM   dba_audit_trail where owner='AUDIT_TEST' order by timestamp;

USERNAME   EXTENDED_TIMESTAMP                OWNER      OBJ_NAME   ACTION_NAME
---------  -------------------            -----------   ---------  ------------
AUDIT_TEST 13-NOV-20 07.43.19.361519 AM +    AUDIT_TEST   TEST     CREATE TABLE
             00:00

AUDIT_TEST 13-NOV-20 07.43.34.679913 AM +    AUDIT_TEST   TEST       INSERT
              00:00

Puoi anche attivare il controllo di oggetti specifici solo con privilegi specifici e, in questo caso, vengono registrate solo le informazioni di controllo specifiche per quell'oggetto. Nell'esempio seguente, il controllo è abilitato su select e delete nella tabella AUDIT1.abcd. Le operazioni di inserimento, selezione ed eliminazione vengono eseguite sulla tabella. Poiché solo select e delete sono sottoposti a controllo, l'operazione di inserimento non viene registrata nelle tabelle di controllo.

SQL> create user audit1 identified by abcd1234;
User created.
SQL> conn audit1
Enter password:
Connected.

SQL> create table abcd (id char);
Table created.
SQL> exit
[oracle@svr002 adump]$ sqlplus / as sysdba

SQL> audit select,delete on audit1.abcd;

Audit succeeded.
SQL> conn audit1
Enter password:
Connected.
SQL> insert into abcd values ('a');

1 row created.

SQL> /

1 row created.

SQL> select * from abcd;

I
-
a
a
SQL> delete from abcd;

2 rows deleted.

SQL> column username format a9
column owner format a5
column obj_name format a10
column action_name format a11
column sql_text format a40SQL> SQL> SQL> SQL>
SQL> select username, owner, obj_name,action_name from dba_audit_trail where owner='AUDIT1';

USERNAME     OWNER    OBJ_NAME   ACTION_NAME
-------------------  ----------   --------------
AUDIT1       AUDIT1     ABCD      SELECT
AUDIT1       AUDIT1     ABCD      DELETE

3. Controllo unificato di Oracle Database

Controllo unificato è una nuova funzionalità di Oracle 12c. A partire dalla versione 12c, il database Oracle utilizza per impostazione predefinita il controllo in modalità mista, che abilita sia il controllo standard di Oracle sia alcuni criteri di controllo del controllo unificato.

Per impostazione predefinita, quando installi un nuovo database Oracle 12c o una versione successiva, puoi vedere che il controllo unificato è impostato su False in V$option, ma questo non significa che unified auditing sia disabilitato. Il controllo unificato è impostato su False e audit_trail su DB, il che significa che il database utilizza il controllo in modalità mista.

SQL> select parameter , value from v$option where PARAMETER = 'Unified Auditing';

PARAMETER              VALUE
-------------------- --------------------
Unified Auditing       FALSE

SQL> show parameter audit_trail

NAME                     TYPE    VALUE
------------------------------------ -----------
audit_trail              string  DB

Il controllo in modalità mista offre l'opportunità di conoscere il controllo unificato, prima di passare completamente al controllo unificato e di disattivare il controllo standard del database. Nell'audit in modalità mista, per impostazione predefinita sono attivati due criteri di controllo unificati: ORA_SECURECONFIG e ORA_LOGON_FAILURES. Questi criteri indicano che il controllo unificato è attivato in modalità mista.

SQL> select policy_name,enabled_option from AUDIT_UNIFIED_ENABLED_POLICIES;

POLICY_NAME      ENABLED_OPTION
-------------------- ---------------
ORA_SECURECONFIG     BY USER
ORA_LOGON_FAILURES   BY USER

3.1 Disattivazione dei controlli unificati dalla modalità mista

In modalità mista, la verifica unificata è attivata utilizzando i due criteri (ORA_SECURECONFIG e ORA_LOGON_FAILURES). Per disattivare il controllo unificato e consentire al database di utilizzare la verifica standard, esegui i seguenti comandi:

SQL> noaudit policy ORA_SECURECONFIG;

Noaudit succeeded.

SQL> noaudit policy ORA_LOGON_FAILURES;

Noaudit succeeded.

SQL> select policy_name,enabled_option from AUDIT_UNIFIED_ENABLED_POLICIES;

no rows selected

3.2 Abilitazione del controllo unificato puro

Se vuoi uscire dal controllo in modalità mista predefinito e utilizzare solo il controllo unificato puro, puoi eseguire i seguenti comandi:

SQL> alter system set audit_trail='NONE' scope=spfile;

System altered.

QL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

[oracle@svr002 ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@svr002 lib]$ make -f ins_rdbms.mk uniaud_on ioracle

SQL> startup
ORACLE instance started.

Total System Global Area 6442448984 bytes
Fixed Size          8910936 bytes
Variable Size        1140850688 bytes
Database Buffers     5284823040 bytes
Redo Buffers            7864320 bytes
Database mounted.
Database opened.

SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

VALUE
----------------------------------------------------------------
TRUE

3.3 Utilizzo di Oracle Unified Auditing

L'audit unificato ti consente di raggruppare le opzioni di controllo in un semplice criterio di controllo. Puoi creare il tuo criterio di controllo con diversi privilegi. L'esempio seguente crea un semplice criterio di controllo per verificare il privilegio create table di un utente.

SQL> create AUDIT POLICY policy_for_auditor PRIVILEGES create table WHEN    'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''UNIFIED_AUDIT''' EVALUATE PER SESSION;

Audit policy created.

SQL> audit policy policy_for_auditor;

Audit succeeded.

SQL> conn unified_audit
Enter password:
Connected.

SQL> create table test (id char);

SQL> exit

[oracle@svr002 lib]$ sqlplus / as sysdba

SQL> COLUMN event_timestamp FORMAT A30
SQL> COLUMN dbusername FORMAT A10
SQL> COLUMN action_name FORMAT A20
SQL> COLUMN object_schema FORMAT A10
SQL> COLUMN object_name FORMAT A20
SQL> SELECT event_timestamp,dbusername,action_name,object_schema,object_name FROM unified_audit_trail WHERE  dbusername ='UNIFIED_AUDIT';

EVENT_TIMESTAMP                DBUSERNAME    ACTION_NAME   OBJECT_SCHEMA  OBJECT_NAME
------------------------------ ---------- ---------------  --------------- ----------
19-NOV-20 06.03.40.001665 AM   UNIFIED_AUDIT  CREATE TABLE  UNIFIED_AUDIT    TEST

4. Manutenzione dei log di controllo in Oracle BMS

Se il parametro audit_trail è impostato su DB o DB,EXTENDED, i log di controllo vengono scritti nelle tabelle SYS.AUD$ che si trovano in SYSTEM Tablespace. Man mano che la tabella SYS.AUD$ cresce, esaurisce lo spazio in SYSTEM tablespace. Se il parametro audit_trail è impostato su OS,XML, i log di controllo vengono scritti nei file del sistema operativo archiviati nella directory audit_file_dest.

Anche l'accumulo di log di controllo e la pulizia non corretta possono riempire il filesystem. Devi pulire periodicamente le tabelle SYS.AUD$ o la directory audit_file_dest. Nel controllo unificato, anche i record di controllo vengono scritti in AUD$UNIFIED. Per eseguire la pulizia, puoi procedere in uno dei seguenti modi:

  • Sposta le tabelle audit_trail in un nuovo spazio delle tabelle che libera lo spazio nello spazio delle tabelle SYSTEM.
  • Pulisci periodicamente lo spazio tabella e la directory contenente gli audit log utilizzando il processo DBMS_AUDIT_MGMT.create_purge_job.

4.1 Sposta le tabelle audit_trail in un nuovo spazio tabella

SQL> select table_name, tablespace_name from dba_tables where table_name='AUD$';

TABLE_NAME                TABLESPACE_NAME
-------------------- ------------------------------
AUD$                           SYSTEM

SQL> create tablespace audit_trail datafile '/apps/oracle/oracle_base/oradata/DBRMAN/audit.dbf' size 5M autoextend on;

Tablespace created.

SQL> begin
 dbms_audit_mgmt.set_audit_trail_location(
  audit_trail_type            => dbms_audit_mgmt.audit_trail_aud_std,
  audit_trail_location_value  => 'AUDIT_TRAIL');
end;
/  2    3    4    5    6

PL/SQL procedure successfully completed.

SQL> Select table_name, tablespace_name from dba_tables where table_name='AUD$';

TABLE_NAME                 TABLESPACE_NAME
-------------------- ------------------------------
AUD$                         AUDIT_TRAIL

4.2 Eliminazione dei dati dell'audit trail precedente

Prima di eliminare i log di controllo, devi assicurarti di averli archiviato in base al tuo caso d'uso. Potresti voler mantenere solo i record di controllo per un periodo specifico e, in questo caso, non è necessario archiviarli piuttosto che pianificare un job di eliminazione.

La procedura seguente è valida sia per i controlli standard che per quelli unificati.

Copia dei log di controllo precedenti a 10 giorni nel bucket GCS (facoltativo)

Se i clienti utilizzano Audit_Trail=OS, tutti gli audit log verranno archiviati nella directory audit_file_dest. I clienti possono utilizzare gcloud storage cp insieme a uno script personalizzato per cercare i file più vecchi di 10 giorni e spostarli nel bucket Cloud Storage. Di seguito è riportato uno script di esempio:

#!/bin/sh
find /apps/oracle/oracle_base/admin/dbrman/adump -type f -mtime +10 | while read line
do
gcloud storage cp $line gs://oracle_backup_psoracle/audit
done

I clienti possono utilizzare lo script riportato sopra, nonché preparare script personalizzati e utilizzare cron per pianificare questo script ogni giorno per il processo di archiviazione. I clienti che non vogliono conservare i record di controllo precedenti possono saltare questa procedura.

Il seguente esempio mostra come creare job di eliminazione automatica da eseguire ogni giorno e cancellare i log di controllo più vecchi di 10 giorni:

Passaggio 1 : inizializza l'infrastruttura di controllo e imposta un intervallo predefinito di 10 giorni

SQL> begin
  DBMS_AUDIT_MGMT.init_cleanup(
    audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
    default_cleanup_interval => 240 /* hours */);
END;
/

PL/SQL procedure successfully completed.

SQL > select * from dba_audit_mgmt_config_params where PARAMETER_NAME='DEFAULT CLEAN UP INTERVAL';

PARAMETER_NAME            PARAM    AUDIT_TRAIL
------------------------- ----- --------------------
DEFAULT CLEAN UP INTERVAL  240   STANDARD AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL  240   FGA AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL  240   OS AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL  240   XML AUDIT TRAIL

Passaggio 2 : crea un job per l'archiviazione giornaliera del timestamp.

Questo job specifica un timestamp di 10 giorni da utilizzare durante l'eliminazione dei vecchi record di controllo.

SQL> begin
  DBMS_SCHEDULER.CREATE_JOB (
    job_name   => 'DAILY_AUDIT_ARCHIVE_TIMESTAMP',
    job_type   => 'PLSQL_BLOCK',
    job_action => 'BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(AUDIT_TRAIL_TYPE =>
                   DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,LAST_ARCHIVE_TIME => sysdate-10); END;',
    start_date => sysdate,
    repeat_interval => 'FREQ=HOURLY;INTERVAL=24',
    enabled    =>  TRUE,
    comments   => 'Create an archive timestamp'
  );
END;
/  2    3    4    5    6    7    8    9   10   11   12   13

PL/SQL procedure successfully completed.

SQL > select AUDIT_TRAIL, LAST_ARCHIVE_TS, DATABASE_ID from dba_audit_mgmt_last_arch_ts;

AUDIT_TRAIL             LAST_ARCHIVE_TS                    DATABASE_ID
-------------------- -----------------------------------   -----------
STANDARD AUDIT TRAIL 07-NOV-20 07.37.34.000000 AM +00:00    3990895662

Passaggio 3 : crea un job di eliminazione giornaliera per eliminare tutti i dati precedenti al giorno LAST_ARCHIVE_TS

SQL> begin
  DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
    AUDIT_TRAIL_TYPE           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */,
    AUDIT_TRAIL_PURGE_NAME     => 'Daily_Audit_Purge_Job',
    USE_LAST_ARCH_TIMESTAMP    => TRUE
  );
END;
/

Commit;

SQL> col JOB_NAME FOR a30
SQL> col JOB_FREQUENCY FOR a40
SQL> select JOB_NAME,JOB_STATUS,AUDIT_TRAIL,JOB_FREQUENCY from DBA_AUDIT_MGMT_CLEANUP_JOBS;

JOB_NAME               JOB_STAT AUDIT_TRAIL          JOB_FREQUENCY
---------------------- -------- -------------------- ------------------------
DAILY_AUDIT_PURGE_JOB  ENABLED  STANDARD AUDIT TRAIL FREQ=HOURLY;INTERVAL=24

Passaggio 4 : seleziona dba_scheduler_jobs per visualizzare DAILY_AUDIT_ARCHIVE_TIMESTAMP e DAILY_AUDIT_PURGE_JOB appena creati e le relative pianificazioni

SQL> col next_run_date FOR a50
SQL> select job_name, next_run_date, state, enabled from dba_scheduler_jobs where job_name like '%AUDIT%';

JOB_NAME                          NEXT_RUN_DATE                STATE     ENABLED
------------------------------ ------------------------------  --------- --------
DAILY_AUDIT_ARCHIVE_TIMESTAMP  18-NOV-20 07.37.33.000000 AM +  SCHEDULED    TRUE
                   00:00

DAILY_AUDIT_PURGE_JOB          18-NOV-20 07.44.35.744657 AM    SCHEDULED    TRUE
                   TC/UTC