128 votes

php mysqli_connect : méthode d'authentification inconnue du client [caching_sha2_password]

J'utilise php mysqli_connect pour se connecter à une base de données MySQL (toutes 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');    
}
?>

il s'agit de 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 n'est pas possible de se connecter avec user1 ou user2 ;

erreur : mysqli_connect() : Le serveur a demandé une méthode d'authentification inconnue du client [caching_sha2_password] 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 en utilisant caching_sha2_password sur le serveur mySql ?

0 votes

L'AOP soutient-elle cette démarche ? J'ai vu d'autres rapports à propos de mysqli .

0 votes

La réponse postée par @ doit être marquée comme réponse acceptée.

0 votes

Depuis le terminal, connectez-vous à mysql avec cette commande : mysql -u Root -p puis entrez le mot de passe Root, puis collez la commande suivante ALTER USER 'Root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root' ;

277voto

黃皓哲 Points 1536

Je résous ce problème par une commande SQL :

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

qui est référencée 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ée par https://dev.mysql.com/doc/refman/8.0/en/create-user.html

cela fonctionne pour moi

4 votes

Bonne réponse. Le problème est que vous devrez peut-être faire cela à chaque fois que vous ajoutez un nouvel utilisateur, en fonction des paramètres du serveur.

4 votes

Je cherchais un moyen de convertir les nouveaux hashs de mots de passe en anciens hashs (comme le format user2 en format user1 dans la question) et votre réponse a fait exactement l'affaire.

13 votes

C'est ainsi que s'est achevée une lutte de 4 jours pour que php-7.2.9/11 fonctionne correctement avec MySQL-8.012. Pourrait-on convaincre quelqu'un de l'équipe PHP de l'indiquer dans l'INSTALL de l'archive ? Cela permettrait d'économiser des milliers d'heures de travail au cours de l'année ou des deux années à venir.

74voto

abeyaz Points 1348

Depuis PHP 7.4, ce problème n'existe plus. Support des caching_sha2 a été ajoutée à mysqlnd.


Actuellement, l'extension PHP mysqli ne supporte pas la nouvelle fonctionnalité d'authentification caching_sha2. Vous devez attendre qu'une mise à jour soit publiée.

Consultez l'article des développeurs MySQL à ce sujet : https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

Ils n'ont pas mentionné l'AOP, peut-être devriez-vous essayer d'entrer en contact avec l'AOP.

3 votes

0 votes

@Machavity savez-vous si cette réponse est toujours valable ? C'est à dire qu'elle n'est pas encore dépassée par les nouvelles versions de PHP ?

1 votes

@gen Basé sur ce bogue Il semble que cela fonctionne à partir de la version 7.4.2.

37voto

Eranda Jayamaha Points 141
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 également pour moi.

4 votes

C'est la seule solution qui a fonctionné pour moi sur un serveur local utilisant un serveur WAMP :)

0 votes

Cela a semblé résoudre le problème sur la configuration LAMP maison de mon Mac. Je n'ai pas rencontré ce problème sur debian.

1 votes

Pour les débutants, 1) cd /usr/local/mysql/bin 2) ./mysql -u root -p 3) entrez la ligne de code dans ce message

30voto

CJ Dennis Points 565

Si vous êtes sous Windows et qu'il n'est pas possible d'utiliser la fonction caching_sha2_password vous pouvez procéder comme suit :

  1. réexécuter le programme d'installation de MySQL
  2. sélectionnez "Reconfigurer" à côté de Serveur MySQL (l'élément du haut)
  3. cliquez sur "Suivant" jusqu'à ce que vous arriviez à "Méthode d'authentification"
  4. remplacer "Use Strong Password Encryption for Authentication (RECOMMENDED)" par "Use Legacy Authentication Method (Retain MySQL 5.X Compatibility)".
  5. cliquez sur "Suivant"
  6. entrez le mot de passe de votre compte racine dans Comptes et rôles, et cliquez sur "Vérifier"
  7. cliquez sur "Suivant"
  8. continuez à cliquer sur "Suivant" jusqu'à ce que vous arriviez à "Appliquer la configuration"
  9. cliquez sur "Exécuter"

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

2 votes

Je n'ai pas eu le temps de m'en rendre compte, mais j'ai eu l'occasion de le faire.

1 votes

Je doute que ce soit la cause première du piratage de votre base de données. Merci pour l'article OP, il m'a aidé à configurer MySQL pour une application ancienne fonctionnant avec PHP 5.6.

18voto

Chinnon Santos Points 161

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

Modifier 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';

0 votes

Cela fonctionne, merci... il faut configurer ces 2 choses : mysql conf et alter user

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