Investigación sobre las funciones de auditoría de MySQL

 DBA team  360 computación en la nube 

Declaración de heroína

La función de auditoría de la base de datos es principalmente registrar todo tipo de comportamientos operativos de los usuarios en la base de datos para futuras consultas, análisis y seguimiento de problemas. Este artículo investiga principalmente algunos complementos de auditoría de código abierto y presenta sus métodos de instalación y uso.

PD: tecnología de primera línea rica, una amplia gama de formas, todo en " 3 60 cloud computing " punto de preocupación ¡Oh!

Descripción general de la auditoría

1.1

registro general

El propio MySQL ha proporcionado información sobre todas las declaraciones ejecutadas por el servidor, que es lo que normalmente llamamos el registro general, que se puede utilizar como un registro de auditoría, pero tiene las siguientes desventajas:

a) Independientemente de si la sentencia ejecutada se ejecuta correctamente, se registrará, lo que dará como resultado una gran cantidad de información no válida, y el filtrado posterior no es fácil de operar;

b) Cuando el acceso concurrente del servidor es muy grande, el registro de registro tendrá un cierto impacto en la producción de IO, de modo que afectará el rendimiento del servidor;

c. Los archivos de registro son fáciles de agregar rápidamente y no hay una función de rotación regular de acuerdo con la fecha y el tamaño, lo que no es conveniente para el mantenimiento;

1.2

binlog

Otro registro es un registro binario, que comúnmente se conoce como binlog. Dado que binlog registra todas las modificaciones a los datos del servidor, en teoría, es posible auditar todos los registros de datos y los registros relacionados con los cambios en la estructura de la tabla. Sin embargo, debido a que el binlog en sí no lo hace, registrar la información de uso de la conexión, si pasa la auditoría binlog, debe pasar una sección adicional para registrar la información de la conexión, y usar el ID de subproceso asignado para compararlo con el ID de subproceso en el binlog. Realice un análisis de correlación para obtener información sobre el conexión utilizada, como:

El ID de proceso de root @ localhost es 18494655, y se crea una tabla después de conectarse:

imagen imagen

Luego, podemos analizar el binlog y obtener la siguiente información:

imagen

Se puede ver que la identificación del hilo puede coincidir con la identificación del proceso, y puede obtener la información de uso, pero cómo guardarla, debe mantener la información de conexión para cada conexión inicial. Puede configurar los parámetros init_connect y crear adicional Para registrar la tabla de información de conexión, haga lo siguiente:

image.png


Hay un problema:

Todos los usuarios deben tener permiso de escritura en la tabla access_log, de lo contrario, no hay forma de usar la base de datos;

b. La tabla access_log necesita un mantenimiento manual regular;

c. No se registrará la información de conexión del superusuario;

d) Debido a la limitación del propio registro de binlog, es imposible auditar algún contenido que no esté registrado en binlog.


En respuesta a la insuficiencia de los casos anteriores, han aparecido algunos complementos de auditoría de código abierto, que se explicarán por separado a continuación, ¡y se pueden usar según corresponda de acuerdo con las necesidades de auditoría! Las siguientes son algunas notas de referencia para esta prueba:

a. No incluye comparación de desempeño, solo para pruebas funcionales;

b. Complemento de auditoría de MariaDB y McAfee, la operación de prueba se basa en la versión MySQL 5.7.25, MySQL 8.0 ya que la versión homóloga es 8.0.18;

c. El complemento de auditoría de Percona usa Percona MySQL como el entorno básico de MySQL, y la versión es 8.0.19

Complemento de auditoría MariaDB

2.1

Versión compatible

MySQL 5.7 y por debajo

2.2

instalación

a. Instale el complemento:

image.png

b. Archivo de configuración

image.png

c. Complemento de carga de MySQL 5.7

image.png

d. Problema de carga de MySQL 8.0

image.png

2.3

Parámetros relacionados

image.png

2.4

Evento de auditoría

image.png

2.5

Ejemplo



a. Solo audit connect ddl

image.png

image.png


b. Solo audit connect dml

image.png


image.png


c. Solo audit connect dcl

image.png

image.png

Complemento de auditoría de Percona

3.1

Versión compatible

Rama de Percona MySQL

3.2

instalación

a. Instale el complemento

Viene con él, no se requiere instalación adicional

b. Archivo de configuración


image.png

3.3

Parámetros relacionados


image.png

una. audit_log_format

  • VIEJO

  • image.png
  • NUEVO

image.png

  • JSON

    {"audit_record": {"name": "Consulta", "record": "4082_2020-05-07T03: 28: 39", "timestamp": "2020-05-07T03: 30: 42Z", "command_class": "insert", "connection_id": "8", "status": 1136, "sqltext": "insert into t1 values ​​(0)", "user": "root [root] @localhost []", "host" : "localhost", "os_user": "", "ip": "", "db": ""}}


    {"audit_record": {"name": "Consulta", "record": "4083_2020-05-07T03: 28: 39", "timestamp": "2020-05-07T03: 30: 50Z", "command_class": "insert", "connection_id": "8", "status": 0, "sqltext": "insert into t1 values ​​(0,1)", "user": "root [root] @localhost []", " host ":" localhost "," os_user ":" "," ip ":" "," db ":" "}}


    {"audit_record": {"name": "Consulta", "record": "4084_2020-05-07T03: 28: 39", "timestamp": "2020-05-07T03: 30: 52Z", "command_class": "insertar", "connection_id": "8", "status": 0, "sqltext": "insertar en valores t1 (0, 2)", "usuario": "root [root] @localhost []", " host ":" localhost "," os_user ":" "," ip ":" "," db ":" "}}

  • CSV

    "Consulta", "49284_2014-08-27T10: 47: 11", "2014-08-27T10: 47: 23 UTC", "show_databases", "37", 0, "mostrar bases de datos", "root [root] @ localhost [] "," localhost "," "," "

B. audit_log_exclude (incluir) _commands


image.png


C. audit_log_strategy

  • ASYNCHRONOUS - (predeterminado) registro usando el búfer de memoria, no suelta mensajes si el búfer está lleno

  • RENDIMIENTO: registrar usando el búfer de memoria, eliminar mensajes si el búfer está lleno

  • SEMISYNCHRONOUS: inicie sesión directamente en el archivo, no vacíe ni sincronice todos los eventos

  • SYNCHRONOUS: inicie sesión directamente en el archivo, descargue y sincronice todos los eventos

3.4

Ejemplo

image.png

Complemento de auditoría de McAfee

4.1

Versión compatible

MySQL 5.7 y por debajo

4.2

instalación

a. Instale el complemento


image.png

b. Archivo de configuración

image.png

c. Complemento de carga de MySQL 5.7

image.png

d. Complemento de carga de MySQL 8.0

image.png

4.3

Parámetros relacionados


image.png

4.4

Ejemplo

{"msg-type": "actividad", "fecha": "1588835829430", "thread-id": "7", "query-id": "30", "usuario": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ versión_cliente ":" 5.7.25 "," _ plataforma ":" x86_64 "," nombre_programa ":" mysql "}," filas ":" 5 "," estado ":" 0 "," cmd ":" show_databases "," objects ": [{" db ":" information_schema "," name ":" / home / vicigel / sandboxes / msb_5_7_25_1 / tmp / # sql_3b49_0 ","obj_type": "TABLE"}], "query": "mostrar bases de datos"}

{"msg-type": "actividad", "fecha": "1588835829430", "thread-id": "7", "query-id": "31", "usuario": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ client_version ":" 5.7.25 "," _ plataforma ":" x86_64 "," program_name ":" mysql "}," status ":" 0 "," cmd ":" show_tables "," objects ": [{" db ":" information_schema "," name ":" / home / vicigel / sandboxes / msb_5_7_25_1 / tmp / # sql_3b49_0 "," obj_type ":" TABLE "}], "consulta": "mostrar tablas"}

{"msg-type": "actividad", "fecha": "1588835843868", "thread-id": "7", "query-id": "32", "user": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ client_version ":" 5.7.25 "," _ plataforma ":" x86_64 "," program_name ":" mysql "}," status ":" 0 "," cmd ":" create_table "," objetos ": [{" db ":" prueba "," nombre ":" t1 "," obj_type ":" TABLA "}]," consulta ":"crear tabla t1 (id int clave primaria auto_increment, b int) "}

{"msg-type": "actividad", "fecha": "1588835856549", "thread-id": "7", "query-id": "33", "user": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ versión_cliente ":" 5.7.25 "," _ plataforma ":" x86_64 "," nombre_programa ":" mysql "}," filas ":" 2 "," estado ":" 0 "," cmd ":" insertar "," objetos ": [{" db ":" prueba "," nombre ":" t1 "," obj_type ":" TABLA "}]," consulta ":"insertar en los valores t1 (0,1), (2,3) "}

{"msg-type": "actividad", "fecha": "1588835864360", "thread-id": "7", "query-id": "34", "user": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ versión_cliente ":" 5.7.25 "," _ plataforma ":" x86_64 "," nombre_programa ":" mysql "}," filas ":" 1 "," estado ":" 0 "," cmd ":" eliminar "," objetos ": [{" db ":" prueba "," nombre ":" t1 "," obj_type ":" TABLA "}]," consulta ":"eliminar de t1 donde id = 1 "}

{"msg-type": "actividad", "fecha": "1588835865148", "thread-id": "7", "query-id": "35", "user": "msandbox", "priv_user" : "msandbox", "ip": "127.0.0.1", "host": "localhost", "connect_attrs": {"_ os": "linux-glibc2.12", "_ client_name": "libmysql", "_ pid ":" 18280 "," _ versión_cliente ":" 5.7.25 "," _ plataforma ":" x86_64 "," nombre_programa ":" mysql "}," cmd ":" Salir "," consulta ":" Salir "}

Resumen y comparación

La siguiente es una comparación de los complementos de auditoría anteriores de las siguientes dimensiones

5.1

Granularidad de auditoría

El complemento de auditoría de Percona puede controlar varias auditorías de diferentes granularidades a través del parámetro audit_log_exclude (include) _commands. El complemento de auditoría de McAfee puede controlar la granularidad de la auditoría a través del parámetro audit_record_cmds (audit_whitelist_cmds). El complemento de auditoría de MariaDB solo se puede controlar mediante eventos de auditoría, por lo que :

Complemento de auditoría Percona = Complemento de auditoría de McAfee> Complemento de auditoría MariaDB

5.2

Registro de formato de auditoría

El complemento de auditoría de Percona puede controlar diferentes formatos de salida de registros a través del parámetro audit_log_format. Ni el complemento de auditoría de McAfee ni el complemento de auditoría MariaDB tienen control de parámetros relacionados, por lo que:

Complemento de auditoría de Percona> Complemento de auditoría de McAfee = Complemento de auditoría de MariaDB

5.3

Impacto de rendimiento controlable

El complemento de auditoría de Percona puede controlar diferentes estrategias de descarga de registros a través del parámetro audit_log_strategy, que puede ser una buena compensación y compromiso entre el rendimiento y la integridad de los registros. El complemento de auditoría de McAfee puede controlar cada descarga de registros audit_json_file_sync a través del parámetro audit_json_file_sync. El complemento de auditoría MariaDB no tiene nada que ver con eso. Control de parámetros, por lo tanto:

Complemento de auditoría de Percona> Complemento de auditoría de McAfee> Complemento de auditoría de MariaDB

De los resultados de la comparación, el complemento de auditoría de Percona es mejor que el complemento de auditoría de McAfee. Si MySQL elige la rama de Percona, entonces el programa de auditoría integrado es sin duda el mejor, y el otro complemento de auditoría de McAfee y el complemento de auditoría de MariaDB Antes del uso real en la línea, también se deben realizar las pruebas adecuadas.

Artículos relacionados

  1. https://mariadb.com/kb/en/mariadb-audit-plugin/

  2. https://www.percona.com/doc/percona-server/LATEST/management/audit_log_plugin.html

  3. https://github.com/mcafee/mysql-audit/wiki/Configuration


Supongo que te gusta

Origin blog.51cto.com/15127564/2666257
Recomendado
Clasificación