Registrar intentos de inicio de sesión MySQL

25

De vez en cuando hay intentos fallidos de inicio de sesión en nuestro servidor de producción MySQL (el panel de control de MySQL nos alerta). ¿Hay alguna forma de registrar cada inicio de sesión exitoso y fallido en el servidor MySQL sin habilitar general_log?

Creemos que general_logno es una opción porque es un servidor de producción con alta carga.

CarlosH
fuente
Según el funcionario de mysql: As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. solo la versión emprendedora lo tiene.
Tiina

Respuestas:

20

solo para informar al curioso: ¡busca en tu registro de errores y listo!

(1) edit my.cnf (la documentación de configuración se encuentra aquí )

[mysqld]

: # Ingrese un nombre para el archivo de registro de errores. De lo contrario, se utilizará un nombre predeterminado.

error_registro = / var / log / mysql / error

: # por defecto es 1. Si el valor es> 1, las conexiones abortadas y los errores de acceso denegado para nuevos intentos de conexión se escriben en el registro de errores

log_warnings = 2

...

(2) al comando ejecutar

$ sudo cat /var/log/mysql/error.err | egrep '[aA] acceso denegado'

(3) y lo tienes

(4) si necesita restringir el usuario (ataque de dos o intento de recuperación de contraseña de usuario mysql en una base de datos multiusuario), entonces ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> OTORGAR USO EN *. * TO 'atacante' @ 'localhost' CON MAX_CONNECTIONS_PER_HOUR 100;

restringir a solo 100 intentos de recuperación de contraseña por hora.

centurias
fuente
2

Creo que el registro general podría registrar todos los intentos de inicio de sesión (éxito y error) entre muchas otras cosas. El principal problema es que el registro general afectará el rendimiento de su base de datos. Puede activar el registro general con la consulta

SET GLOBAL general_log = 'on'

para versiones más recientes de MySQL.

rmc00
fuente
¿Esto es temporal o permanente ?, ¿si es temporal eso significa que necesito modificar /etc/mysql/my.cnfmysql?
DarckBlezzer
Es temporal. Ese enfoque puede funcionar, o puede agregar --general-loga las banderas cuando inicia MySQL.
rmc00
1

Hola, no creo que sea posible.

A partir de mysql 5.1.29: puede especificar la opción de almacenamiento (tabla o archivo) y la ubicación y el registro que desea: error, consulta general, binaria o lenta. Que yo sepa, no puede especificar el formato del registro o lo que se registra. Podría estar equivocado, pero creo que todos los intentos de inicio de sesión se registrarán en el registro general, y no en el error.

Sin embargo, suponiendo que su servidor mysql se esté ejecutando en una máquina separada, desde su aplicación, y que necesite el puerto 3306 (o lo que sea) abierto y no pueda usar el túnel ssh, su servidor mysql aún no debería ser accesible para nadie nilly Recomiendo no exponerlo al tráfico web, y si debe (como en el caso de que resida en algún lugar que no esté detrás de su firewall) vincularlo a la dirección IP o al bloque ip de su servidor de aplicaciones y su IP de acceso de administrador (donde se encuentre accediendo desde)

Espero que ayude.

Konung
fuente
1

Uno puede iniciar sesión connecty quitordenar usando mysql-audit-plugin.

  1. Encuentre la versión correcta del lanzamiento de mysql-audit-plugin , usé mysql 5.7, así que usé audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. reubique el soarchivo descargado en el lugar dado por mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. activando la función de registro mysql>set global audit_json_file=ON, por defecto registra todas las operaciones exitosas. configurando los set global audit_record_cmds='quit,connect'registros solo se conecta y se cierra, supongo, de acuerdo con la configuración de mysql-audit-plugin .

Así es como se ve en el archivo para iniciar y cerrar sesión:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}
Tiina
fuente
0

si el servidor en cuestión no debe tener conexiones externas, como está configurado, me preocuparía algún tipo de ataque contra su servidor de aplicaciones, a menos que los inicios de sesión fallidos sean de nuevas aplicaciones que se están implementando antes de que se haya configurado el usuario / pase.

si el servidor está de alguna manera expuesto a conexiones externas en 3306, a menos que sea intencional y necesario, establecería la configuración como dijo Nick, y también consideraría el uso de iptables para restringir el tráfico a 3306 desde solo sus servidores de aplicaciones.

cpbills
fuente
MySQL niega automáticamente las conexiones de la dirección IP que no tienen al menos una fila coincidente en mysql.user
David M
0

En http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ , el autor muestra un método para capturar los paquetes usando tcpdump y filtrar la salida en función de la cadena.

Esto resuelve sus inquietudes con respecto al general_log y el rendimiento, aunque tcpdump podría incurrir en una penalización de rendimiento menor. Esta solución también registrará menos datos que el Registro de consultas generales.

No lo he usado yo mismo, pero suena muy útil.

Stefan Lasiewski
fuente
Suena bien, pero el enlace no funciona para mí.
CarlosH
El enlace funciona para mí esta mañana, usando Firefox. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski
Y me interesaría escuchar tu experiencia con esto.
Stefan Lasiewski