web-dev-qa-db-fra.com

Erreur: mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification non sécurisée

Je reçois l'erreur suivante:

La connexion à la base de données a échoué: 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 version antérieure, vous devrez peut-être supprimer l'indicateur des anciens mots de passe de votre my.cnf fichier

J'utilise PHP 5.3.8 et MySQL 5.5.16 sur ma machine locale et mon hôte (temple des médias) fonctionne PHP 5.3 MySQL 5.0.51a. Le la version sur le serveur en direct est plus ancienne que celle sur ma machine.

Comment puis-je corriger cette erreur et me connecter à MySQL depuis ma machine locale?

Je sais qu'il existe des articles similaires à celui-ci, mais je les ai tous essayés et aucun ne fonctionne.

23
user982853
  • Supprimer ou commenter old_passwords = 1 dans my.cnf

Redémarrez MySQL. Si vous ne le faites pas, MySQL continuera d'utiliser l'ancien format de mot de passe, ce qui signifie que vous ne pouvez pas mettre à niveau les mots de passe à l'aide de la fonction de hachage PASSWORD () intégrée.

Les anciens hachages de mot de passe sont de 16 caractères, les nouveaux sont de 41 caractères.

  • Connectez-vous à la base de données et exécutez la requête suivante:

    SELECT user, Length(`Password`) FROM  `mysql`.`user`;
    

Cela vous montrera quels mots de passe sont dans l'ancien format, par exemple:

 + ---------- + -------------------- + 
 | utilisateur | Longueur (mot de passe) | 
 + ---------- + -------------------- + 
 | racine | 41 | 
 | racine | 16 | 
 | user2 | 16 | 
 | user2 | 16 | 
 + ---------- + -------------------- +

Notez ici que chaque utilisateur peut avoir plusieurs lignes (une pour chaque spécification d'hôte différente).

Pour mettre à jour le mot de passe de chaque utilisateur, exécutez ce qui suit:

UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';

Enfin, privilèges de vidage:

FLUSH PRIVILEGES;

Source: Comment réparer "mysqlnd ne peut pas se connecter à MySQL 4.1+ en utilisant l'ancienne authentification" sur PHP5.

40
Ramil Amerzyanov

J'ai eu un problème où les anciens mots de passe avaient été activés par le serveur par défaut, donc un simple SET PASSWORD FOR 'some-user' @ '%' = PASSWORD ('XXXX'); ne fonctionnerait pas (pour des raisons dues à d'anciens logiciels et hérités dans lesquels je n'entrerai pas ...)

Solution :

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;

Détails :

Faire cela en tant qu'utilisateur connecté

SET Password = PASSWORD('password')

N'a tout simplement pas fonctionné

Par exemple testable ici

SHOW CREATE TABLE `mysql`.`user`;

Le mot de passe ne passerait pas de

| Host | USER | PASS |

ANCIEN MOT DE PASSE

| % | some-user | 7fa559aa33d844b4 |

CE QUE J'AI VOULU, EG NOUVEAU MOT DE PASSE

| % | some-user | *CF04AECA892176E6C0C8206F965C03374D12F93E |

J'ai donc recherché les variables des anciens mots de passe

SHOW VARIABLES;

...
old_passwords = ON
...

Donc, fondamentalement, je devais d'abord régler le serveur mysql var sur old_password = OFF, par exemple, cela a fonctionné pour moi

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;
3
aqm

Configurez le serveur Mysql cible pour autoriser l'ancienne authentification non sécurisée.

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords

Simplement dans le fichier my.cnf sur le serveur Mysqld cible, commentez les anciens mots de passe.

Peut-être existe-t-il un moyen d'obtenir PHP build (ou le construire vous-même) qui utilise le mode d'authentification compatible (ancien)).

2
rkosegi

J'ai eu le même problème en essayant de me connecter à mediatemple external-db via IIS sur ma machine Windows locale. La mise à jour de mon mot de passe pour l'utilisateur spécifique de la base de données a résolu le problème de connexion à la base de données.

Dans (mt) Account center, mettez simplement à jour le mot de passe. J'ai utilisé le même mot de passe et cela a résolu tous mes problèmes.

2
Joe K

J'ai rencontré cette erreur pour la première fois avec une base de données Media Temple sur un serveur de grille.

Le problème est dû au fait que j'ai utilisé un mot de passe pour un utilisateur de base de données qui était toujours dans son ancien format de mot de passe. Le nouveau format nécessite plus de 10 caractères, des caractères spéciaux, un nombre etc ...

J'ai créé un nouvel utilisateur de base de données et un nouveau mot de passe dans le nouveau format et cela a bien fonctionné.

0
INSITE MOBILE

J'ai eu ce problème lorsque j'ai importé une base de données à partir d'une ancienne version de MySQL. Le plus gros problème - cela m'empêchait de me connecter à MySQL avec mon utilisateur root, donc j'ai dû reset the root password en suivant les instructions ci-dessous:

Après cela, j'ai pu appliquer le correctif indiqué ci-dessus.

Par exemple. par:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
0
littledynamo

j'ai le même problème et ce sont toutes les étapes que j'ai faites pour résoudre ce problème:

  1. Vérifiez si vous utilisez les informations d'identification correctes
  2. utilisez cette commande pour vous assurer que vous changez votre passe: utilisez des caractères, des chiffres et des lettres (plus de 10)

    MISE À JOUR mysql.user SET Password = PASSWORD ('NewPassword') WHERE user = 'username';

  3. assurez-vous de commenter la valeur oldpassword dans /etc/my.cnf
  4. redémarrez le service mysql pour éviter tout autre problème
0
abdelaziz barda