MySQL Trace usuarios
Esta semana tuve que preparar un método para auditar que usuarios se conectaban a servidores MySQL. Identificando cuenta, host, ip, etc....
Encontré dos métodos que son parecidos.
A- TRAZA COMPLETA
Con este sistema, se puede saber quien se conecta, cuando, que hace, ins,del,upd,sel, etc.etc....
en el fichero /etc/my.cnf agregar dos lineas
general_log_file = /var/lib/mysql/mysqld.log
general_log = 1
luego consultar un fichero TXT,
/var/lib/mysql # cat mysqld.log | grep conn
/var/lib/mysql # cat mysqld.log | grep sel
/var/lib/mysql # cat mysqld.log | grep ins
/var/lib/mysql # cat mysqld.log | grep del
/var/lib/mysql # cat mysqld.log | grep upd
Que problemas tiene ?
El fichero (aunque se pueda compactar) crecerá mucho si hay mucha actividad en el motor. se puede rotar cada noche, compactar y también tendrá un poco de sobrecarga el propio motor, teniendo que guardar todas las actividades que hace.
Sin embargo, la traza es muy detallada, podemos saber quien borró un registro y cuando.
B- SOLO LOGINS
Con este otro sistema solo obtendremos información de las conexiones que se hacen en un motor, se pueden guardar varios datos, pero no tendremos información de que hace cada usuario.
En el motor, tenemos que crear una base, una tabla y dar permisos de inserción a todos.
>create database admin;
>create table connections (id int auto_increment primary key, login datetime, user varchar(50), datab varchar(50), conn_id int);
>grant insert on admin.connections to '%'@'%';
>flush privileges;
Luego editar el fichero /etc/my.cnf agregando esa línea, cada nueva conexión ejecutará ese query.
init_connect='INSERT INTO admin.connections VALUES (null, NOW(), CURRENT_USER(), database(), CONNECTION_ID());'
Y luego desde el propio motor, consultar la tabla.
select * from admin.connections;
Puede ser creativos y agregar mas información, database(), ip(), etc.etc...
Comentarios
Publicar un comentario