Plugin de MySQL Enterprise Audit

El plugin de auditoría de MySQL Enterprise permite a MySQL Server producir un archivo log que contiene un registro de auditoría de la actividad del servidor. El contenido del log incluye cuándo se conectan y desconectan los clientes, y qué acciones realizan mientras están conectados, como qué bases de datos y tablas acceden.

Puede agregar estadísticas sobre el tiempo y el tamaño de cada consulta para detectar valores atípicos. Por defecto, los logs de plugin de auditoría están desactivados y debe definir filtros de plugin de auditoría para activar el registro de eventos auditables para todos los usuarios o para usuarios específicos.

Temas relacionados

Asignación de Privilegios de Administración de Auditoría

Por defecto, el usuario administrador HeatWave definido al crear el sistema de base de datos tiene el privilegio AUDIT_ADMIN. Puede otorgar privilegios de administración de auditoría a más usuarios.

Uso de un cliente de línea de comandos

Utilice un cliente de línea de comandos como el cliente MySQL o el shell MySQL para otorgar privilegios de administración de auditoría a más usuarios.

  1. Conéctese al sistema de base de datos mediante el cliente de línea de comandos que desee.
  2. Ejecute el siguiente comando para otorgar al usuario, User001, el privilegio de administración de auditoría:
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Definición de filtros de plugin de auditoría

Debe definir filtros de plugin de auditoría para activar el registro de eventos auditables para todos los usuarios o para usuarios específicos. Por defecto, los logs del plugin de auditoría están desactivados.

Uso de un cliente de línea de comandos

Utilice un cliente de línea de comandos como el cliente MySQL o el shell MySQL para definir filtros de plugin de auditoría para activar el registro de eventos auditables para todos los usuarios o para usuarios específicos.

Para esta tarea, se necesita lo siguiente:
  • MySQL versión 8.0.34-u2 o superior.
  1. Conéctese al sistema de base de datos mediante el cliente de línea de comandos que desee.
  2. Defina filtros de auditoría para activar el registro. Consulte Writing Audit Log Filter Definitions.
    1. Para auditar todos los eventos, ejecute el siguiente comando:
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Para auditar solo eventos de conexión, ejecute el siguiente comando:
      SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }');
    3. Para ver los filtros de auditoría, ejecute el siguiente comando:
      SELECT * FROM mysql_audit.audit_log_filter;
  3. Asigne los filtros que creó en el paso 2 a los usuarios. Puede asignar los filtros de auditoría a todos los usuarios o a un usuario específico.
    1. Para asignar el filtro de auditoría por defecto para registrar todos los eventos desde cualquier cuenta, utilice el carácter comodín %:
      SELECT audit_log_filter_set_user('%', 'log_all');
    2. Para asignar el filtro de auditoría por defecto para registrar todos los eventos de conexión desde cualquier cuenta, utilice el carácter comodín %:
      SELECT audit_log_filter_set_user('%', 'log_conn_events');
    3. Para asignar el filtro de auditoría predeterminado para registrar todos los eventos de un usuario específico, como user_dba, ejecute el siguiente comando:
      SELECT audit_log_filter_set_user('user_dba@%', 'log_all');
    4. Para ver las reglas asignadas, ejecute el siguiente comando:
      SELECT * FROM mysql_audit.audit_log_user;
    5. Para anular la asignación de las reglas del usuario, user_dba, ejecute el siguiente comando:
      SELECT audit_log_filter_remove_user('user_dba@%');
  4. (Opcional) Puede insertar sus propios datos de evento con el componente, audit_api_message_emit. Consulte Función de mensaje de auditoría. Por ejemplo:
    SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message';

Acceso y análisis de datos de auditoría

Utilice los datos de auditoría para supervisar el sistema de base de datos.

Uso de un cliente de línea de comandos

Utilice un cliente de línea de comandos como MySQL Client o MySQL Shell para acceder a los datos de auditoría y analizarlos.

  1. Conéctese al sistema de base de datos mediante el cliente de línea de comandos que desee.
  2. Para ver los logs nuevos desde la última vez que los comprobó, ejecute el siguiente comando. Esto garantiza que siempre se actualice con los logs de auditoría más recientes sin volver a revisar los logs más antiguos.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Para extraer logs de auditoría a partir de un registro de hora concreto, proporcione parámetros adicionales en la función audit_log_read():
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Para ver los datos de auditoría en un formato más fácil de leer, utilice las funciones JSON_PRETTY() y CONVERT():
    SELECT JSON_PRETTY(CONVERT(audit_log_read( ... ) USING UTF8MB4));
  5. Para transformar los datos en formato tabular, utilice las funciones JSON MySQL. Por ejemplo, puede transformar un subjuego de los pares nombre-valor de JSON en un formato de tabla estructurado, lo que facilita la interacción y el análisis de datos:
    SELECT @@server_uuid as server_uuid, ts, class, event, login_ip,login_user,connection_id,
     status,connection_type,_client_name,_client_version,
     command,sql_command,command_status
    FROM
    JSON_TABLE
    (
      AUDIT_LOG_READ( '{ "start": {\"timestamp\": \"2023-08-16 15:33:37\"}, \"max_array_length\": 10 }' ), 
      '$[*]'
      COLUMNS
      ( 
        ts TIMESTAMP PATH '$.timestamp',
        class VARCHAR(20) PATH '$.class',
        event VARCHAR(80) PATH '$.event',      
        login_ip VARCHAR(200) PATH '$.login.ip',
        login_user VARCHAR(200) PATH '$.login.user',
        connection_id VARCHAR(80) PATH '$.connection_id',
        status INT PATH '$.connection_data.status',
        connection_type VARCHAR(40) PATH '$.connection_data.connection_type',
        _client_name VARCHAR(80) PATH '$.connection_data.connection_attributes._client_name',
        _client_version VARCHAR(80) PATH '$.connection_data.connection_attributes._client_version',
        command VARCHAR(40) PATH '$.general_data.command',
        sql_command VARCHAR(40) PATH '$.general_data.sql_command',
        command_status VARCHAR(40) PATH '$.general_data.status'
       )) as audit_log;
  6. Para acotar aún más la extracción de datos, utilice las cláusulas WHERE en las sentencias SQL. Por ejemplo, WHERE connection_type <> 'SSL'.