web-dev-qa-db-fra.com

php mysqli_connect: méthode d'authentification inconnue du client [mot de passe caching_sha2]

J'utilise php mysqli_connect pour me connecter à une base de données MySQL (tous sur localhost)

<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_Host', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');

$dbc = mysqli_connect(DB_Host, DB_USER, DB_PASSWORD, DB_NAME);

if(!$dbc){
    die('error connecting to database');    
}
?>

voici la table mysql.user: mysql.user table

Fichier ini du serveur MySQL:

[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password

avec caching_sha2_password dans le fichier ini du serveur MySQL, il est impossible de se connecter avec user1 ou user2;

erreur: mysqli_connect (): La méthode d'authentification demandée par le serveur était inconnue du client [motdepasse_saching_sha2] dans ...

avec mysql_native_password dans le fichier ini du serveur MySQL, il est possible de se connecter avec user1, mais avec user2, même erreur;


comment puis-je me connecter avec caching_sha2_password sur le serveur MySQL?

47
Guti_Haz

Actuellement, l'extension mysqli php ne supporte pas la nouvelle fonctionnalité d'authentification caching_sha2. Vous devez attendre jusqu'à ce qu'ils publient une mise à jour.

Voir les articles associés aux développeurs mysql: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

Ils n'ont pas mentionné PDO, peut-être devriez-vous essayer de vous connecter avec PDO.

20
abeyaz

Je résous cela par la commande SQL:

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

qui est référencé par https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

si vous créez un nouvel utilisateur

 CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

qui est référencé par https://dev.mysql.com/doc/refman/8.0/en/create-user.html

ça marche pour moi

105
黃皓哲
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

Supprimer les guillemets (') après ALTER USER et conserver les guillemets (') après mysql_native_password BY

Cela fonctionne pour moi aussi.

11
Eranda Jayamaha

Si vous utilisez Windows et qu'il est impossible d'utiliser caching_sha2_password, vous pouvez effectuer les opérations suivantes:

  1. relancez le programme d'installation MySQL
  2. sélectionnez "Reconfigurer" à côté de MySQL Server (l'élément le plus haut)
  3. cliquez sur "Suivant" jusqu'à "Méthode d'authentification"
  4. changez "Utiliser un mot de passe fort pour l'authentification (RECOMMANDÉ)" en "Utiliser une méthode d'authentification héritée (conserver la compatibilité MySQL 5.X)"
  5. cliquez sur Suivant"
  6. entrez votre mot de passe de compte racine dans Comptes et rôles, puis cliquez sur "Vérifier"
  7. cliquez sur Suivant"
  8. continuez à cliquer sur "Suivant" jusqu'à "Appliquer la configuration"
  9. cliquez sur "Exécuter"

Le programme d'installation apportera toutes les modifications de configuration nécessaires.

8
CJ Dennis

J'ai exécuté la commande suivante ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123'; dans la ligne de commande et enfin redémarrer MySQL dans les services locaux.

2
JRonald Moreno

Cela fonctionne pour moi (PHP 5.6 + PDO/MySQL Server 8.0/Windows 7 64bits)

Editez le fichier C:\ProgramData\MySQL\MySQL Server 8.0\my.ini:

default_authentication_plugin=mysql_native_password

Réinitialiser le service MySQL sous Windows et dans le shell MySQL ...

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
1
Chinnon Santos