Pour des besoins spécifiques, j’ai eu besoin de conserver pendant une période précise toutes les connexions faites sur mon serveur mysql.
Par défaut, aucun log ne le permet dans mysql.
On peut, à un moment T, extraire la liste des users connectée grâce à la commande suivante :
mysql> SELECT CONCAT('[Security] User ', USER(), ' logged in.'); +---------------------------------------------------+ | CONCAT('[Security] User ', USER(), ' logged in.') | +---------------------------------------------------+ | [Security] User root@localhost logged in. | +---------------------------------------------------+ 1 row in set (0.01 sec)
Nous allons donc lancer cette requête à chaque connexion et la stocker dans un fichier de log.
Afin de stocker les connexions dans un fichier, nous allons avoir besoin d’une librairie développée par un projet communautaire.
wget http://www.mysqludf.org/lib_mysqludf_log/lib_mysqludf_log_0.0.2.tar.gz
Cette archive contient un fichier source et un fichier sql (contenant les drop et create function).
Nous allons compiler et installer cette librairie.
apt-get install libmysqlclient-dev #(si vous ne l'avez pas d'installé) tar xzf lib_mysqludf_log_0.0.2.tar.gz gcc -I/usr/include/mysql -shared -o lib_mysqludf_log.so lib_mysqludf_log.c cp lib_mysqludf_log.so /usr/lib/mysql/plugin/
On paramètre maintenant mysql afin de loguer chaque connexion :
vim /etc/mysql/my.cnf # dans la section [mysqld] on rajoute les paramètres suivants init_connect = 'SELECT log_error(CONCAT("[Security] User ", USER(), " logged in."));' log_error = /var/log/mysql/error.log
On relance mysql puis on crée les fonctions :
mysql> create function lib_mysqludf_log_info returns string soname 'lib_mysqludf_log.so'; Query OK, 0 rows affected (0.01 sec) mysql> create function log_error returns string soname 'lib_mysqludf_log.so'; Query OK, 0 rows affected (0.00 sec)
A partir de maintenant, le fichier /var/log/mysql/error.log contiendra toutes les connexions, il faudra donc penser à mettre un logrotate dessus.
[root@server1:/var/log/mysql]$ tail -f error.log [Security] User root@localhost logged in.