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.

Il y a 3 commentaires

  • Greg09-30-2014 18:03:41

    Pour info : doc mysql :
    « IDENTIFIED WITH is available as of MySQL 5.5.7. Before 5.5.7, authentication plugins are not used, so only the remarks about IDENTIFIED BY apply. »

  • josh10-03-2014 16:17:24


    Existe-t'il la même chose pour PostgreSQL?


  • Ulrich10-06-2014 13:25:45


    Oui il exitse un équivalent pour PostgreSQL: premier chapitre

    "Trust Authentication"