web-dev-qa-db-fra.com

phpMyAdmin sur MySQL 8.0

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 quelque chose à voir avec les mots de passe forts mis en œuvre et la fraîcheur relative de la version de MySQL.

Mais je ne connais rien à la configuration de pilote et de connexion la plus avancée.

Est-ce que quelqu'un a fait face au même problème et l'a résolu? :RÉ

Modifier
installé avec apt

apt-get install mysql-server phpmyadmin
32
Lucas Noetzold

Connectez-vous à la console MySQL avec l'utilisateur root:

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

et changez le plug-in d'authentification avec le mot de passe ici:

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 plug-in d'authentification préféré dans le manuel de référence MySQL 8.0

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

Cela fonctionne parfaitement dans un environnement docker ized:

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 docker image 

Mais rappelez-vous, il ne s'agit que d'une solution "rapide et sale" dans l'environnement de développement. Il n'est pas sage de changer le le plug-in d'authentification préféré de 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 mise à jour le 10/04/2018

Modifiez le plug-in d'authentification par défaut MySQL en supprimant la mise en commentaire du paramètre default_authentication_plugin=mysql_native_password dans /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

default_authentication_plugin

46

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 méthodes d'authentification les plus anciennes, par exemple. CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'.

Plus 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

17
kgr

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

  1. Ajouter default_authentication_plugin = mysql_native_password au
    [mysqld] section de my.cnf
  2. Entrez mysql et créez un nouvel utilisateur en faisant quelque chose comme CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
  3. Accordez les privilèges nécessaires. Par exemple. GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost'; puis FLUSH PRIVILEGES;
  4. Se connecter à phpmyadmin avec un nouvel utilisateur
12
user1706897

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

default_authentication_plugin = mysql_native_password

Voir aussi: Mysql Ref

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

12
sneaky

Je suis allé au système 

préférences -> mysql -> initialiser la base de données -> utiliser le cryptage de mot de passe hérité (au lieu de fort) -> même mot de passe entré 

en tant que mon fichier config.inc.php, j'ai redémarré le serveur Apache et cela a fonctionné. J'étais toujours méfiant à ce sujet alors j'ai arrêté les serveurs Apache et mysql et les ai redémarrés et maintenant cela fonctionne. 

8
Claire

J'ai résolu mon problème essentiellement avec la réponse d'András:

1- Connectez-vous à la console MySQL avec l'utilisateur root:

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

Et tapez le mot de passe de la racine à auth.

2- J'ai créé un nouvel utilisateur:

mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';

3- Accorder tous les privilèges au nouvel utilisateur:

mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';

4- Changer le plugin d’authentification avec le mot de passe:

mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

Maintenant, phpmyadmin fonctionne bien en enregistrant le nouvel utilisateur.

5
Bruno Carazato

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

  1. Entrez dans les préférences système -> mysql

  2. Sélectionnez "Initialize database" et entrez un nouveau mot de passe root en sélectionnant "Use Legacy Password Encryption".

  3. Connectez-vous à phpmyadmin avec le nouveau mot de passe.

4

Si vous utilisez le conteneur mysql docker officiel, il existe une solution simple:

Ajoutez la ligne suivante à votre service docker-compose:

command: --default-authentication-plugin=mysql_native_password

Exemple de configuration:

mysql:
     image: mysql:8
     networks:
       - net_internal
     volumes:
       - mysql_data:/var/lib/mysql
     environment:
       - MYSQL_ROOT_PASSWORD=root
       - MYSQL_DATABASE=db
     command: --default-authentication-plugin=mysql_native_password
3
Biró Dani

Comme @kgr l'a mentionné, MySQL 8.0.11 a modifié la méthode d'authentification.

J'ai ouvert un rapport de bogue phpMyAdmin à ce sujet: https://github.com/phpmyadmin/phpmyadmin/issues/14220 .

MySQL 8.0.4-rc fonctionnait bien pour moi, et je pense que c’est ridicule pour MySQL d’apporter un tel changement dans une version au niveau des correctifs. 

3
Isaac Bennetch

J'ai eu ce problème, je n'ai trouvé aucun fichier ini dans Windows, mais la solution qui a fonctionné pour moi était très simple.
1. Ouvrez le programme d'installation mysql.
2. Reconfigurer le serveur mysql, c'est le premier lien.
3. Aller à la méthode d'authentification.
4. Choisissez 'Authentification héritée'.
5. Donnez votre mot de passe (champ suivant).
6. Appliquer les modifications.

Ça y est, espérons que ma solution fonctionne bien pour vous aussi!

2
Stephan

Pour résoudre ce problème, je viens d'exécuter une requête dans ma console mysql

Pour cette connexion à la console mysql en utilisant cette

mysql -u {username} -p{password}

Après cela, je viens d'exécuter une requête comme indiqué ci-dessous: -

ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';

quand je lance cette requête, je reçois le message que cette requête est exécutée. Puis connectez-vous à PHPMYADMIN avec nom d'utilisateur/mot de passe.

2
Lucky Saini

Comme beaucoup l'ont souligné dans d'autres réponses, changer le plug-in d'authentification par défaut de MySQL en natif fait l'affaire.

Néanmoins, comme je ne peux pas utiliser le nouveau plugin caching_sha2_password, je vais attendre que la compatibilité soit développée pour fermer le sujet.

1
Lucas Noetzold

J'ai résolu ceci avec MySQL 8.0.12 en lançant:

mysql_upgrade -u root
0
Pelmered