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:
Luego, podemos analizar el binlog y obtener la siguiente información:
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:
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 compatibleMySQL 5.7 y por debajo
2.2
instalación
a. Instale el complemento:
b. Archivo de configuración
c. Complemento de carga de MySQL 5.7
d. Problema de carga de MySQL 8.0
2.3
Parámetros relacionados
2.4
Evento de auditoría
2.5
Ejemplo
a. Solo audit connect ddl
b. Solo audit connect dml
c. Solo audit connect dcl
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
3.3
Parámetros relacionados
una. audit_log_format
VIEJO
NUEVO
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
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
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
b. Archivo de configuración
c. Complemento de carga de MySQL 5.7
d. Complemento de carga de MySQL 8.0
4.3
Parámetros relacionados
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
https://mariadb.com/kb/en/mariadb-audit-plugin/
https://www.percona.com/doc/percona-server/LATEST/management/audit_log_plugin.html
https://github.com/mcafee/mysql-audit/wiki/Configuration