84 votes

phpMyAdmin sur MySQL 8.0

UPDATE
Des versions plus récentes de phpMyAdmin ont résolu ce problème. J'ai testé avec succès avec phpMyAdmin 5.0.1.


J'ai installé le serveur MySQL 8.0 et phpMyAdmin, mais lorsque j'essaie d'y accéder à partir du navigateur, les erreurs suivantes se produisent :

#2054 - The server requested authentication method unknown to the client
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

J'imagine que cela doit avoir un rapport avec les mots de passe forts mis en place et la relative fraîcheur de la version de MySQL.

Mais je ne sais rien de la configuration la plus avancée des pilotes et des connexions.

Quelqu'un a-t-il rencontré le même problème et l'a-t-il résolu ? :D

1 votes

Quelle version de PHP utilisez-vous ? Je parie qu'il s'agit d'un problème au niveau du pilote, car phpMyAdmin utilise la version de PHP la plus récente. mysqli .

0 votes

PHP version 7.0.27-0

126voto

András Szabácsik Points 1079

Connectez-vous à la console MySQL avec Racine utilisateur :

root@9532f0da1a2a:/# mysql -u root -pPASSWORD

et modifiez le plugin d'authentification avec le mot de passe qui s'y trouve :

mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Query OK, 0 rows affected (0.08 sec)

Vous pouvez lire plus d'informations sur le plugin Preferred Authentication dans le manuel de référence de MySQL 8.0.

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

Il fonctionne parfaitement dans un docker l'environnement :

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -p 3306:3306 -d mysql:latest

docker exec -it mysql bash

mysql -u root -pPASSWORD

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

exit

exit

docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Vous pouvez donc maintenant vous connecter à phpMyAdmin sur http://localhost:8080 avec Root / PASSWORD


mysql/mysql-server

Si vous utilisez mysql/mysql-server image docker

Mais n'oubliez pas qu'il ne s'agit que d'une solution "rapide et sale" dans l'environnement de développement. Il n'est pas judicieux de modifier le Plugin d'authentification préférée MySQL .

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Solution actualisée au 10/04/2018

Changez le plugin d'authentification par défaut de MySQL en décommentant le fichier default_authentication_plugin=mysql_native_password à l'intérieur /etc/my.cnf

à utiliser à vos risques et périls

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Solution de contournement mise à jour au 30/01/2019

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

plugin_authentification_par défaut

28 votes

Je vous bénis. J'ai perdu beaucoup de temps à essayer de comprendre ça. Au fait, sur MacOS, lorsque j'utilisais phpMyAdmin avec Brew, la commande que je devais exécuter était : ALTER USER Root@localhost IDENTIFIED WITH mysql_native_password BY 'secret' (Sinon, j'ai eu un "ERROR 1396 (HY000) : L'opération ALTER USER a échoué pour 'Root'@'%')

1 votes

J'ai essayé ces astuces et j'ai réussi à le faire fonctionner. Puis j'ai déplacé le dossier de mysql, et maintenant l'erreur est de retour et le travail s'en va. Qu'est-ce qui peut bien se passer ?

0 votes

Veuillez essayer ma solution mise à jour. Que voulez-vous dire exactement par "déplacé le dossier de mysql" ?

34voto

kgr Points 579

Le nouveau MySQL 8.0.11 utilise caching_sha2_password comme méthode d'authentification par défaut. Je pense que phpMyAdmin ne peut pas comprendre cette méthode d'authentification. Vous devez créer un utilisateur avec l'une des anciennes méthodes d'authentification, par ex. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd' .

Plus d'informations ici https://dev.mysql.com/doc/refman/8.0/en/create-user.html et ici https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html

18voto

user1706897 Points 141

J'ai résolu ce problème en procédant comme suit :

  1. Ajouter default_authentication_plugin = mysql_native_password à la
    [mysqld] section de my.cnf
  2. Entrez dans mysql et créez un nouvel utilisateur en faisant quelque chose comme CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
  3. Accordez des privilèges si nécessaire. Par exemple GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost'; et ensuite FLUSH PRIVILEGES;
  4. Connectez-vous à phpmyadmin avec un nouvel utilisateur

0 votes

J'ai essayé de créer simplement un utilisateur avec mysql_native_password mais mysqli ne parvient toujours pas à se connecter. Vous devez modifier le plugin default_authentication_plugin pour que cela fonctionne, comme décrit dans le post de user1706897. J'ajoute un vote positif à cette réponse.

0 votes

@PeteH - avez-vous redémarré mysql deamon ?

0 votes

Je ne crois pas avoir redémarré le démon, mais ça ne peut pas faire de mal.

17voto

sneaky Points 330

Une autre idée : tant que les outils phpmyadmin et autres outils php ne fonctionnent pas avec, ajoutez simplement cette ligne à votre fichier /etc/mysql/my.cnf

default_authentication_plugin = mysql_native_password

Voir aussi : Mysql Ref

Je sais que c'est un problème de sécurité, mais que faire si les outils ne fonctionnent pas avec caching_sha2_password ?

0 votes

Eh bien, quand j'y pense, ce n'est pas vraiment un problème de sécurité, car avant la v8, il utilise toujours mysql_native_password

1 votes

Ce paramètre ini n'aide même pas avec MySQL 8.0.11 GA et la dernière version en date PHPMyAdmin 4.8.0.1. PHPMyAdmin lance toujours une erreur : mysqli_real_connect() : Le serveur a demandé une méthode d'authentification inconnue du client [caching_sha2_password].

0 votes

Eh bien, il semble que les changements n'ont pas été adoptés. Avez-vous redémarré le serveur MySQL et êtes-vous sûr qu'il n'y a pas d'autre fichier de configuration ?

13voto

Claire Points 121

Je suis allé au système

préférences -> mysql -> initialiser la base de données -> utiliser le cryptage du mot de passe legacy (au lieu de strong) -> entrer le même mot de passe

comme mon config.inc.php et redémarré le serveur Apache, et ça a marché. J'avais encore des doutes, alors j'ai arrêté le serveur apache et mysql et je les ai relancés et maintenant ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X