Après la mise à niveau d'un serveur PHP de PHP 5.3.3 vers PHP 5.6.x, en travaillant avec MySQL Server 5.1.x sur une simple boîte CentOS 6.x 64 bits, quelques nouvelles applications Web affichaient cette erreur de connexion mysqlnd : mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée
C'était l'erreur complète et exacte :
mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée. Veuillez utiliser un outil d'administration pour réinitialiser votre mot de passe avec la commande SET PASSWORD =PASSWORD(‘your_existing_password’). Cela stockera une nouvelle valeur de hachage plus sécurisée dans mysql.user. Si cet utilisateur est utilisé dans d'autres scripts exécutés par PHP 5.2 ou une version antérieure, vous devrez peut-être supprimer l'indicateur d'anciens mots de passe de votre fichier my.cnf
Cela se produit parce que le nouveau client mysqlnd php refuse de travailler avec les anciens mots de passe de MySQL. Ainsi, même si vous avez old_passwords=1, cela ne fonctionnera pas pour ces nouvelles applications Web, qui nécessitent une sécurité de hachage de mot de passe renforcée.
Comment puis-je corriger l'erreur mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée ?
Cette erreur peut être corrigée facilement si vous suivez les étapes suivantes :
Modifier le fichier de configuration MYSQL principal :
nano -w /etc/my.cnf
Modifier :
old_passwords=1
à
old_passwords=0
Appliquer les modifications :
service mysqld restart
Connectez-vous à la console MySQL en tant que root :
mysql -u root -p
Réinitialisez maintenant le mot de passe de l'utilisateur pour utiliser le nouveau hachage :
SET PASSWORD FOR 'mysqluser'@'localhost'=PASSWORD('passwordhere'); flush privileges;
Remplacez "mysqluser" et "passwordhere" par votre vrai nom d'utilisateur et mot de passe.
Revenez maintenant à /etc/my.cnf et annulez les modifications apportées précédemment, définissez :
old_password=1
Redémarrez MySQL pour appliquer les modifications :
service mysqld restart
Tout est fait, votre utilisateur devrait maintenant utiliser le hachage de mot de passe MySQL plus fort.
Cela peut être vérifié à partir de la console MySQL à l'aide de cette commande :
mysql> SELECT user, Length(Password) FROM mysql.user; +------------------+------------------+ | user | Length(Password) | +------------------+------------------+ | root | 16 | | forum_user | 16 | | user2 | 41 | | lorex | 41 | | m3user | 16 |
Si vous voyez '41', alors cet utilisateur utilise le nouveau hachage, et '16' signifie qu'il utilise l'ancien hachage.
Tout est fait, à ce stade, votre erreur mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée devrait être corrigée et vous devriez pouvoir travailler normalement avec vos applications Web.
Comment réparer :mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée Dernière modification :7 février 2017 par Esteban Borges