web-dev-qa-db-fra.com

PHP avec erreur MySQL 8.0+: le serveur a demandé une méthode d'authentification inconnue du client

J'utilise MySQL version 8 sur PHP 7.0.

Le message d'erreur suivant s'affiche lorsque j'essaie de me connecter à ma base de données à partir de PHP:

Erreur de connexion: SQLSTATE [HY000] [2054] La méthode d'authentification demandée par le serveur est inconnue du client.

PHP pourrait montrer cette erreur

Avertissement: mysqli_connect (): La méthode d'authentification demandée par le serveur est inconnue du client [mot de passe caching_sha2] dans D:\xampp\htdocs\reg\server.php à la ligne 10.

Comment puis-je résoudre ce problème?

37
mohammed yaser

@mohammed, cela est généralement attribué au plug-in d'authentification utilisé par votre base de données mysql.

Par défaut et pour une raison quelconque, le plugin mysql 8 par défaut est auth_socket. La plupart des applications s'attendent généralement à se connecter à votre base de données à l'aide d'un mot de passe .

Si vous n'avez pas encore changé votre plugin d'authentification par défaut mysql, vous pouvez le faire en:
1. Connectez-vous en tant que root à mysql
2. Exécutez cette commande sql:

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

Remplacez 'mot de passe' par votre mot de passe root. Si votre application ne se connecte pas à votre base de données avec l'utilisateur root, remplacez l'utilisateur 'root' dans la commande ci-dessus par l'utilisateur utilisé par votre application.

Digital Ocean en explique un peu plus ici Installation de Mysql

89
Elias Gikonyo

Vous devez modifier les paramètres MySQL. Editez le fichier my.cnf et mettez ce paramètre dans la section mysqld:

[mysqld]
default_authentication_plugin= mysql_native_password

Puis lancez la commande suivante:

FLUSH PRIVILEGES;

La commande ci-dessus active les modifications du mécanisme d'authentification par défaut.

32
michail_w

j'ai essayé beaucoup de façons, mais seulement cela fonctionne pour moi

merci pour solution de contournement

vérifiez votre **. env

MYSQL_VERSION=latest

puis tapez cette commande

$ docker-compose exec mysql bash
$ mysql -u root -p 

(identifiez-vous en tant que root)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

puis allez sur phpmyadmin et connectez-vous en tant que:

  • Host -> mysql
  • utilisateur -> root
  • mot de passe -> root

espérons que cela aide

27
Taioli Francesco

Aucune des réponses ici n'a fonctionné pour moi. Ce que je devais faire c'est:

  1. Relancez le programme d'installation.
  2. Sélectionnez l'action rapide 're-configurer' à côté du produit 'MySQL Server'
  3. Parcourez les options jusqu'à atteindre la méthode d'authentification et sélectionnez "Utiliser la méthode d'authentification existante".

Après cela fonctionne bien.

5
Stuperfied

Face au même problème, je n’étais pas capable d’exécuter wordpress conteneur docker avec mysql version 8 car son mécanisme d’authentification par défaut est caching_sha2_password au lieu de mysql_native_password.

Afin de résoudre ce problème, nous devons réinitialiser le mécanisme d'authentification par défaut sur mysql_native_password.

Recherchez le fichier my.cnf dans votre installation mysql, généralement sur un ordinateur Linux à l'emplacement suivant:/etc/mysql

Editez le fichier my.cnf et ajoutez la ligne suivante juste sous la rubrique [mysqld]

default_authentication_plugin = mysql_native_password

Enregistrez le fichier puis connectez-vous à la ligne de commande mysql en utilisant l'utilisateur root

exécuter la commande FLUSH PRIVILEGES;

1
shivinder thakur

J'utilise Laravel Lumen pour créer une petite application.
Pour moi, c’est parce que le fichier DB_USERNAME n’était pas défini dans mon fichier .env.

DB_USERNAME=root

Cela a résolu mon problème.

0
CIRCLE

Dans le fichier my.cnf, vérifiez ci-dessous 2 étapes.

  • vérifier cette valeur -

    old_passwords = 0;

    il devrait être 0.

  • vérifier cela aussi

    [mysqld] default_authentication_plugin = mysql_native_password Une autre valeur à vérifier est de s'assurer que

    La section [mysqld] devrait être comme ça.

0
sanjaya
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

en tant que mon fichier config.inc.php, a 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.

0
Trần Đức