Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/06/2018, à 16:17

krodelabestiole

[discussion wiki] documenter auth_socket pour MySQL et MariaDB

bruno a écrit :

Le compte root de MariaDB a été créé avec le plugin socket_unix : l'utilisateur MySQL est authentifié par son compte système. C'est la configuration par défaut pour MariaDB et sans doute MySQL sur les dernières versions Ubuntu. Cette configuration à certains avantages au niveau pratique et au niveau de la sécurité.

Si tu veux revenir à une configuration où l'utilisateur root de MySQL s’authentifie avec un mot de passe il faut faire comme indiqué dans la doc lamp :

sudo mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'le_mot_de_pass_choisi';
mysql> FLUSH PRIVILEGES;
mysql> QUIT;

je pense que ça serait bien à l'occase de documenter ça de façon un peu claire sur les docs MySQL et MariaDB

https://mariadb.com/kb/en/library/authe … ix-socket/
https://dev.mysql.com/doc/refman/5.5/en … ugins.html

vu toutes les méthodes dispos ça m'a l'air de commencer à faire une petite usine à gaz, et on a des demandes récurrentes sur la question.
et visiblement la plupart des méthodes qu'on trouve sur la doc ne gèrent pas trop le plugin auth_socket pour le moment (mysql_secure_installation n'affiche rien de spécifique par ex., il ne me semble pas que les dpkg-reconfigure donnent le choix de la méthode non plus).

un autre problème qui se pose c'est qu'on ne peut pas utiliser à la fois auth_socket et mysql_native_password pour un compte. donc si on veut un compte super admin pour créer ou supprimer des bdd via phpMyAdmin par ex., la solution qu'on trouve généralement sur le web c'est de créer un deuxième compte super-admin... ce qui me semble pas terrible.

la requête pour voir la liste des utilisateurs et la méthode de connexion utilisée pour chacun :

SELECT user, host, plugin, authentication_string FROM mysql.user;

Dernière modification par krodelabestiole (Le 15/06/2018, à 18:01)

En ligne

#2 Le 15/06/2018, à 16:56

krodelabestiole

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

à noter aussi que

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'le_mot_de_pass_choisi';

me retourne une erreur de syntaxe sur MariaDB 10.1.

du coup plus manuellement ça donne :

UPDATE mysql.user SET authentication_string = PASSWORD('le_mot_de_pass_choisi'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';

En ligne

#3 Le 15/06/2018, à 17:02

bruno

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

@krodelabestiole : j'avais déjà modifié la note dans la doc lamp pour être sûr que cela fonctionne.
Pour le reste j'hésite à modifier les docs car je n'ai aucune certitude sur les méthodes d'installation par défaut de MySQL et MariaDB sur Ubuntu, notamment sur la 18.04.
Sur Debian c'est mariadb par défaut et un utilisateur root authentifié par auth_socket.

Je comprends que cela en déroute certains mais cette méthode à des avantages :
- pas besoin de saisir de mot de passe pour administrer les bases de données lorsqu'on est déjà root (très pratique pour les tâches cron par exemple);
- les attaques sur les interfaces d'administration à distance (phpmyadmin, adminer, etc.) avec le compte root sont rendues impossibles ;
- pas besoin de stocker des mot de passe en clair pour des applications qui s'exécutent sous le même utilisateur que celui de sa base MySQL (typiquement une appli PHP ou Python);
- …

Au niveau inconvénients :
- cela oblige à changer certaines habitudes ;
- effectivement il faut créer un superutilisateur pour avoir des droits d'administration complets au travers d'un interface comme PHPMyAdmin. Ceci dit on se passe très bien de ce genre d'interface super lourde sur ses propres serveurs.
- …

Hors ligne

#4 Le 15/06/2018, à 17:17

krodelabestiole

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

un autre problème c'est que /etc/mysql/debian.cnf contient les accès à l'administrateur mysql pour que le système effectue certaines opérations.

historiquement on utilisait un utilisateur debian-sys-maint avec mot de passe, maintenant il semble que ce soit root sans mot de passe (via auth_socket donc), et encore, j'ai root sur le vrai Bionic et debian-sys-maint sur le Bionic pour WSL, je me tape un peu la tête contre les murs...

je ne sais pas en quoi modifier la méthode d'authentification de root pourrait entraver les opérations du systèmes. toujours est-il que le fichier /etc/mysql/debian.cnf débute par un beau :

# Automatically generated for Debian scripts. DO NOT TOUCH!

En ligne

#5 Le 15/06/2018, à 18:10

krodelabestiole

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

c'est bien, sur phpMyAdmin c'est déjà documenté : https://doc.ubuntu-fr.org/phpmyadmin#acces_root

je pense que tu as raison, c'est bien d'expliquer les différences entre l'ancien fonctionnement par défaut et le nouveau, mais de conseiller de conserver le choix par défaut de la distro.
mais du coup je serais plutôt d'avis de documenter les passages d'un système à l'autre sur les pages mysql et mariadb, plutôt que via cette note sur la page lamp...

En ligne

#6 Le 16/06/2018, à 07:17

bruno

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

La note sur la page lamp était là au départ pour débloquer les utilisateurs qui n'avaient pas renseigné le mot de passe root de MySQL à l'installation. Je l'ai modifié pour rendre la manipulation compatible avec les dernières versions de MariaDB/MySQL. Je te laisse voir s'il faut supprimer cette note et faire un renvoi vers la doc MySQL.

Je viens de modifier dans le même sens la page phpmyadmin et une partie de la page mysql

Pour info, les deux syntaxes :

CREATE USER 'nom_utilisateur_choisi'@'localhost' IDENTIFIED  BY 'mot_de_passe_solide';
CREATE USER 'nom_utilisateur_choisi'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mot_de_passe_solide';

doivent fonctionner, mais la première ne renseigne pas le champ plugin de la table mysql.user. Je pense donc que la seconde syntaxe est meilleure (plus précise) et plus pérenne. Elle devient indispensable pour modifier un utilisateur existant (ALTER USER).

Hors ligne

#7 Le 16/06/2018, à 07:30

bruno

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

krodelabestiole a écrit :

un autre problème c'est que /etc/mysql/debian.cnf contient les accès à l'administrateur mysql pour que le système effectue certaines opérations.

historiquement on utilisait un utilisateur debian-sys-maint avec mot de passe, maintenant il semble que ce soit root sans mot de passe (via auth_socket donc), et encore, j'ai root sur le vrai Bionic et debian-sys-maint sur le Bionic pour WSL, je me tape un peu la tête contre les murs...

je ne sais pas en quoi modifier la méthode d'authentification de root pourrait entraver les opérations du systèmes.

Effectivement le compte spécial debian-sy-maint devient inutile pour les opérations de maintenance avec l'authentification par socket de root. Ce compte MySQL n'est plus créé à l'installation et il est remplacé par root dans les fichiers de configuration.

Si on remet une authentification par mot de passe pour root il faudrait aussi modifier le fichier /etc/mysql.debian.cnf en renseignant le mot de passe pour que les opérations de maintenance puissent continuer à se faire.

C'est un argument de plus auquel je n’avais pas pensé pour ne pas modifier la méthode d’authentification par défaut.

Hors ligne

#8 Le 16/06/2018, à 18:13

krodelabestiole

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

bon voilà j'ai fait pas mal de modifs.

documentation générale : https://doc.ubuntu-fr.org/mysql#authentification

et j'ai documenté comment transiter entre mysql_native_password / auth_socket mais seulement pour les utilisateurs, et déconseillé de le faire pour root.

j'ai aussi simplifié la doc mariadb avec focus uniquement sur les différences avec mysql : https://doc.ubuntu-fr.org/mariadb

j'ai viré la note sur la page lamp.

En ligne

#9 Le 17/06/2018, à 07:29

bruno

Re : [discussion wiki] documenter auth_socket pour MySQL et MariaDB

Parfait !
C'est super d'avoir des docs à jour que l'on peut donner comme référence aux utilisateurs qui ont un souci. Merci.

Hors ligne