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