Utiliser le compte linux pour se connecter de façon sécurisé à MariaDB et MySQL sans mot de passe
Plus besoin de se souvenir de son mot de passe pour se connecter à un serveur linux, les clées SSH assurent l'authentification. On peut avoir la même chose sur MySQL et MariaDB.
Via un plugin, le serveur de bdd fait confiance aux credentials du système linux, il suffit d'avoir un compte mysql portant le même nom que le compte linux et le mot de passe disparait de la connexion. C'est idéal sur un serveur de développement avec plusieurs utilisateurs et cela facilite grandement la gestion des comptes, même si on oublie de supprimer le compte mysql, la suppression du compte linux suffit.
Cet article va traiter les bases de données MySQL et MariaDB. Le fonctionnement est très proche, mais il y a quelques subtilité dans les requêtes SQL, soyez attentif. De mémoire le plugin est disponible depuis MySQL 5.5 et MariaDB 5.2.
Il faut commencer par activer le plugin "auth_socket", pour cela une simple requête en root est nécessaire. Au vu de la documentation de MariaDB et des quelques articles que j'ai trouvé, il semble que le plugin se soit nommé 'socket_peercred' à un moment de l'histoire des BDD. J'ai testé mon code avec MariaDB 5.5 et MySQL 5.5.
MariaDB [(none)]> INSTALL SONAME 'auth_socket.so'; mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
La liste des plugins installés, peut être obtenue par la requête:
SELECT * FROM mysql.plugin;
Il faut ensuite créer des utilisateurs en déclarant qu'ils doivent utiliser ce plugin, vous noterez l'absence de mot de passe durant la création.
MariaDB [(none)]> CREATE USER 'ulrich'@'localhost' IDENTIFIED VIA unix_socket; MariaDB [(none)]> CREATE USER 'muriel'@'localhost' IDENTIFIED VIA unix_socket; MariaDB [(none)]> FLUSH PRIVILEGES; mysql> CREATE USER 'ulrich'@'localhost' IDENTIFIED WITH auth_socket; mysql> CREATE USER 'muriel'@'localhost' IDENTIFIED WITH auth_socket; mysql> FLUSH PRIVILEGES;
Et voilà, les utilisateurs ulrich et muriel peuvent se logger sur leur compte MySQL ou MariaDB respectif depuis leur compte linux.
ulrich@eeebox:~$ whoami ulrich ulrich@eeebox:~$ mysql -uulrich Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 233 Server version: 5.5.39-MariaDB-1~wheezy-log mariadb.org binary distribution Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit Bye ulrich@eeebox:~$ mysql -umuriel ERROR 1698 (28000): Access denied for user 'muriel'@'localhost'
Et voilà, c'est facile à mettre en place et cela évite de fournir des mots de passes que les développeurs vont oublier. Cette méthode est bien sûr incompatible avec l'utilisation d'interface web comme phpmyadmin ou adminer pour accéder à la bdd.
Réponse de Ulrich le 6 oct. 2014