Auditoría de bases de datos de Oracle en la solución Bare Metal de Oracle
Descripción general
La auditoría de la base de datos es el proceso de registrar, supervisar e informar las acciones realizadas en una base de datos. Permite a los auditores de seguridad observar si los usuarios de la base de datos están usando la base de datos de acuerdo con las políticas establecidas y que no hay incumplimientos de políticas.
La base de datos de Oracle alojada en el servidor de la solución Bare Metal admite todos los procedimientos de auditoría estándar de Oracle como un entorno local sin restricciones. Debes configurar las políticas de auditoría según tus requisitos empresariales.
En esta página, se analizan las políticas de auditoría compatibles con la solución Bare Metal de Oracle y el mantenimiento de los registros de auditoría. En esta página, también se describe cómo usar tu bucket de Cloud Storage para archivar registros de auditoría anteriores si es necesario.
1. Audita las operaciones de los usuarios de SYS
Esta sección se puede usar como referencia para los administradores de bases de datos que desean auditar la actividad realizada por SYS/SYSDBA/SYSOPER.
El parámetro audit_sys_operations permite la auditoría de todas las declaraciones emitidas por SYS/SYSDBA/SYSOPER en un archivo de auditoría del SO. Para habilitar la auditoría de los usuarios de SYS, debes configurar el parámetro audit_sys_operations
como 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
Después de configurar el parámetro audit_sys_operations
, todos los detalles de auditoría a nivel de sistema están disponibles en los archivos de auditoría en la ubicación de directorio especificada por audit_file_dest
.
En el siguiente ejemplo, se muestra cómo crear un usuario de muestra desde sys.
[oracle@svr002 adump]$ sqlplus / as sysdba
SQL> create user audit_test identified by abcd1234;
Verifica los registros de auditoría relevantes en el directorio audit_file_dest
. En este ejemplo, hay 2 operaciones auditadas (conectar y crear usuario), realizadas por el usuario de la base de datos /
con el usuario del SO oracle
y el 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. Auditoría estándar de base de datos
La auditoría está habilitada de forma predeterminada desde 11g en adelante. La auditoría de base de datos se configura mediante la configuración del parámetro audit_trail
en uno de los valores de la siguiente tabla:
Parámetro | Descripción |
NINGUNO | La auditoría está inhabilitada |
DB | La auditoría está habilitada y los datos de auditoría se escriben en la tabla SYS.AUD$ |
DB,EXTENDED | Se comporta como DB, pero también propaga las columnas SQL_TEXT y SQL_BIND |
SO | La auditoría está habilitada. En Unix, los datos de auditoría se escriben en archivos de texto que se encuentran en el directorio especificado mediante audit_file_dest. En Windows, los datos de auditoría se enviarán al Visualizador de eventos. |
XML | La auditoría está habilitada y los datos de auditoría se escriben en archivos XML que se encuentran en el directorio especificado mediante audit_file_dest. Este es el caso de Windows y Unix. |
XML,EXTENDED | Se comporta como XML, pero también propaga las columnas SQL_TEXT y SQL_BIND. |
Puedes configurar audit_trail
como cualquiera de las opciones anteriores según tus requisitos y verificar las actividades auditadas de las tablas SYS.AUD$
o archivos de auditoría generados en el directorio audit_file_dest
.
En el siguiente ejemplo, el usuario audit_test
habilita todas las auditorías de instrucciones y registra todas las operaciones que realiza.
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
También puedes habilitar la auditoría de objetos específicos solo con privilegios específicos y, en ese caso, solo se registra la información de auditoría específica de ese objeto. En el siguiente ejemplo, la auditoría está habilitada en select
y delete
en la tabla AUDIT1.abcd
. Las operaciones de inserción, selección y eliminación se ejecutan en la tabla. Dado que solo se auditan select
y delete
, la operación de inserción no se registra en las tablas de auditoría.
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. Auditoría unificada de la base de datos de Oracle
La auditoría unificada es una función nueva en Oracle 12c. A partir de la versión 12c, la base de datos de Oracle usa la auditoría de modo mixto de forma predeterminada, lo que habilita la auditoría estándar de Oracle y algunas políticas de auditoría de la auditoría unificada.
De forma predeterminada, cuando instalas una base de datos nueva de Oracle 12c o una versión posterior, puedes ver que la auditoría unificada está configurada como False
en V$option
, pero eso no significa que unified auditing
esté inhabilitado. La auditoría unificada está establecida en False
y audit_trail
está establecida en DB
, lo que significa que la base de datos usa la auditoría de modo mixto.
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
La auditoría de modo mixto proporciona una oportunidad para aprender sobre la auditoría unificada, antes de pasar por completo a la auditoría unificada e inhabilitar la auditoría estándar de la base de datos. En la auditoría de modo mixto, dos políticas de auditoría unificadas están habilitadas de forma predeterminada: ORA_SECURECONFIG
y ORA_LOGON_FAILURES
. Estas políticas indican que la auditoría unificada está habilitada en modo mixto.
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 Inhabilita la auditoría unificada del modo mixto
En el modo mixto, se habilita la auditoría unificada mediante las dos políticas (ORA_SECURECONFIG
y ORA_LOGON_FAILURES
). Para inhabilitar la auditoría unificada y permitir que la base de datos use la auditoría estándar, ejecuta los siguientes comandos:
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 Habilita la auditoría unificada pura
Si deseas salir de la auditoría del modo mixto predeterminado y usar solo la auditoría unificada pura, puedes ejecutar los siguientes comandos:
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 Uso de la auditoría unificada de Oracle
La auditoría unificada te permite agrupar opciones de auditoría en una política de auditoría simple.
Puedes crear tu propia política de auditoría con varios privilegios. En el siguiente ejemplo, se crea una política de auditoría simple para auditar a un usuario por su privilegio create
table
.
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. Mantenimiento de los registros de auditoría en la BMS de Oracle
Si el parámetro audit_trail
se establece en DB
o DB,EXTENDED
, los registros de auditoría se escriben en tablas SYS.AUD$
que se encuentran en SYSTEM Tablespace
.
A medida que la tabla SYS.AUD$
crece, se agota el espacio en SYSTEM tablespace
.
Si el parámetro audit_trail
se establece en OS,XML
, los registros de auditoría se escriben en archivos de SO almacenados en el directorio audit_file_dest
.
La acumulación de registros de auditoría y la limpieza inadecuada también pueden llenar el sistema de archivos. Debes limpiar periódicamente las tablas SYS.AUD$
o el directorio audit_file_dest
. En la auditoría unificada, los registros de auditoría también se escriben en AUD$UNIFIED
. Para realizar una limpieza, puedes realizar una de las siguientes acciones:
- Mueve las tablas
audit_trail
a un espacio de tabla nuevo que borre el espacio en el espacio de tabla SYSTEM. - Limpia de forma periódica el espacio de tabla y el directorio que contiene los registros de auditoría mediante el proceso
DBMS_AUDIT_MGMT.create_purge_job
.
4.1 Mueve las tablas audit_trail
a un espacio de tabla nuevo
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 Borra definitivamente los datos de registro de auditoría anteriores
Antes de borrar los registros de auditoría, debes asegurarte de haberlos archivado según tu caso de uso. Es posible que solo quieras mantener registros de auditoría de un período específico y, en ese caso, no necesitas archivarlos en lugar de programar un trabajo de borrado definitivo.
El siguiente procedimiento funciona para la auditoría estándar y la auditoría unificada.
Copia registros de auditoría de más de 10 días en el bucket de GCS (opcional)
Si los clientes usan Audit_Trail=OS, todos los registros de auditoría se almacenarán en el directorio audit_file_dest
. Los clientes pueden usar gcloud storage cp
junto con una secuencia de comandos personalizada para buscar archivos de más de 10 días de antigüedad y moverlos al bucket de Cloud Storage. El siguiente es un ejemplo de secuencia de comandos:
#!/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
Los clientes pueden usar la secuencia de comandos anterior, así como preparar secuencias de comandos personalizadas y usar cron para programar esta secuencia de comandos a diario para un proceso de archivo. Los clientes pueden omitir este proceso si no desean conservar los registros de auditoría antiguos.
En el siguiente ejemplo, se muestra cómo crear trabajos de eliminación definitiva automática para que se ejecuten a diario y se borren los registros de auditoría que superen los 10 días:
Paso 1: Inicializa la infraestructura de auditoría y establece un intervalo predeterminado de 10 días
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
Paso 2: Crea un trabajo de marca de tiempo de archivo diario.
Este trabajo especifica una marca de tiempo de 10 días para usar mientras se borran definitivamente los registros de auditoría anteriores.
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
Paso 3: Crea un trabajo de eliminación definitiva todos los datos antes de 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
Paso 4: Revisa dba_scheduler_jobs
para ver las DAILY_AUDIT_ARCHIVE_TIMESTAMP
nuevas DAILY_AUDIT_PURGE_JOB
y sus programas
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