Voici donc comment utiliser un fichier pour stocker des identifiants MySQL. Elle est utile dans (au moins) deux cas :

  • On a un script de backup (donc non interactif) et dumper 600Mo de base (long) avec un mot de passe sur la ligne de commande (visible via un ps aux) ça le fait moyen ;
  • On est fainéant mais un minimum concerné par la sécurité donc on veut pas avoir le même mot de passe [1] partout mais on trouve ça embêtant d'en retenir un compliqué (bah oui).

D'un point de vue sécurité, c'est moins dangereux qu'un post-it si les permissions sont définies correctement sur le fichier (400).

Concrètement ça se passe en deux temps, tout d'abord on crée le fichier, par convention (?), il porte l'extension cnf, par exemple:

$ cat >> sebastien.cnf
[client]
host     = localhost
user     = sebastien
password = U8BABMYSiLc2XGsMcNtBDRYJ3eWFPe
socket   = /var/run/mysqld/mysqld.sock
$ chmod 400 sebastien.cnf

Puis, on indique au client mysql où trouver les infos de connexion lorsqu'on l'utilise :

mysql --defaults-file=sebastien.cnf

Et là, magie ! les informations contenues dans le fichier sont utilisées pour la connexion.

Notez que les options à spécifier ne sont pas limitées aux identifiants, on peut y mettre à peu près n'importe quelle option comprise par les programmes clients [2].

Outre le cas du backup, cette méthode présente des avantages en environnement mutualisé, lorsque plusieurs personnes peuvent intervenir sur la même machine. On peut avoir plusieurs politiques : un fichier avec un groupe spécifique que tous les utilisateurs devant intervenir sur une application se partagent, un fichier par utilisateur (on prend bien soin de ne donner à chaque utilisateur que les permissions dont il a besoin à partir des hôtes dont il a besoin). De cette façon, les rotations dans les équipes sont plus simples à gérer, il suffit de changer le mot de passe et de mettre à jour le fichier correspondant (puisque le fichier doit être accessible en lecture pour les utilisateurs en ayant besoin, une personne quittant l'entreprise peut très bien enregistrer le mot de passe quelque part), personne n'y verra rien...

Notes

[1] le nom de sa femme

[2] Certaines applications client comme mysqldump ne comprennent pas forcément tout (notamment au niveau des options SSL si ma mémoire ne me fait pas défaut. Dans ce cas il suffit d'ajouter le suffixe loose- à l'option (loose-ssl-ca par exemple), si elle n'est pas comprise par le client utilisé, elle sera ignorée au lieu de générer une erreur.