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