PHP et MySQL : comment résoudre l'erreur The server requested authentication method unknown to the client ?

Depuis la version 5.7, MySQL a renforcé grandement sa sécurité. Au lieu de se connecter avec un mot de passe de manière classique pour administrer la base de données, le système utilise un socket. Cela apporte une sécurité améliorée mais complique la connexion si vous souhaitez utiliser une application comme phpMyAdmin pour gérer les utilisateurs. Si vous utilisez une version de PHP antérieure à la version 7.4, qui supporte le nouveau système d'authentification, alors vous devez changer la configuration de MySQL.

Pour commencer, vous devez vous connecter à votre base de données. Si vous utilisez le système d'exploitation Windows, vous devez lancer 'invite de commande en tant qu'administrateur, puis utiliser la commande de connexion. Pour les autres systèmes, utilisez votre terminal et préfixez la commande de "sudo" pour la lancez en tant que root.

# Windows
mysql -u root
# Linux ou Mac
sudo mysql -u root

Une fois connecté, vous devez changer la méthode d'authentification de l'utilisateur. Pour cela, on utilise la requête "ALTER USER". La clause "IDENTIFIED WITH" permet de changer le plugin d'authentification. Pour revenir à l'ancienne méthode de connexion, indiquez la valeur "mylsql_native_password".

-- Requête qui change le système d'authentification pour l'utilisateur
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'motDePasse';
-- Requête pour recharger les privilèges de connexion (obligatoire)
FLUSH PRIVILEGES;

Si vous souhaitez ensuite que tous les utilisateurs que vous allez créer utilisent l'ancien système de connexion, alors vous allez devoir changer la configuration du serveur. Vous devez ouvrir le fichier de configuration "my.cnf" et changer la ligne suivante :

[mysqld]
default_authentication_plugin= mysql_native_password

Redémarrez le serveur et tous les nouveaux utilisateurs seront créés avec le nouveau plugin. Si vous ne souhaitez pas changer la configuration et quand même créer un utilisateur qui utilise l'ancienne méthode de connexion, vous pouvez le faire directement avec une requête :

CREATE USER 'monUtilisateur'@'localhost' IDENTIFIED WITH mysql_native_password BY 'monMotDePasse';