69 votes

Impossible de se connecter à MySQL 4.1+ avec une ancienne authentification

Je suis en train d'essayer de se connecter à une base de données mySQL à http://bluesql.netmais lorsque j'essaie de me connecter, il donne cette erreur:

Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication

J'ai regardé dans cette, et il a à faire avec un peu ancien mot de passe schéma utilisé avant MySQL 4.1. Les versions plus récentes ont la possibilité d'utiliser d'anciens mots de passe, que j'ai lu peuvent causer ce problème.

Je suis en cours d'exécution de php 5.3, et la connexion avec mySQLi (new mysqli(...)). J'espère que je peux faire quelque chose dans le code pour se connecter à la DB à bluesql.net - il est clair que je ne contrôlent pas comment leur base de données est mis en place. La rétrogradation des versions de php n'est pas une option.

N'importe qui ont des idées?

72voto

VolkerK Points 54118

edit: Ceci s'applique uniquement si vous êtes dans le contrôle du serveur MySQL... si vous n'êtes pas prendre un coup d'oeil au mot de passe Mysql méthode de hachage old vs new

Vérifiez d'abord avec la requête SQL

SHOW VARIABLES LIKE 'old_passwords'

(dans la ligne de commande de MySQL client, HeidiSQL ou que ce soit frontend vous le souhaitez) si le serveur est configuré pour utiliser l'ancien mot de passe schéma par défaut. Si cela renvoie old_passwords,Hors il se trouve que vous avez de vieilles entrées de mot de passe dans l' users tables. MySQL va utiliser l'ancien authentification de routine pour ces comptes. Mais vous pouvez simplement définir un nouveau mot de passe pour le compte et à la nouvelle routine sera utilisé.
Vous pouvez vérifier quelle routine sera utilisé en prenant un coup d'oeil à l' mysql.users tableau (avec un compte qui dispose d'un accès à la table)

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

Ce sera le retour de 16 pour les comptes avec les anciens mots de passe et 41 pour les comptes avec de nouveaux mots de passe (et 0 pour les comptes sans mot de passe, vous voudrez peut-être prendre soin de ceux que bien).
Soit utiliser les outils de gestions de MySQL front end (si il y en a) ou

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges

(remplacez Utilisateur et de l'Hôte avec les valeurs que vous avez reçu de la requête précédente). Ensuite, vérifiez la longueur du mot de passe de nouveau. Il convient de 41 maintenant, et mysqlnd devrait être en mesure de se connecter au serveur.

voir aussi: http://dev.mysql.com/doc/refman/5.0/en/old-client.html
http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
http://dev.mysql.com/doc/refman/5.0/en/set-password.html

65voto

TehShrike Points 4409

Si vous ne pas avoir le contrôle sur le serveur

Je viens d'avoir ce problème, et a été en mesure de travailler autour d'elle.

Tout d'abord, se connecter à la base de données MySQL avec un ancien client qui n'a pas l'esprit old_passwords. Se connecter à l'aide de l'utilisateur de votre script.

L'exécution de ces requêtes:

SET SESSION old_passwords=FALSE;
SET PASSWORD = PASSWORD('[your password]');

Dans votre script PHP, changer votre mysql_connect fonction pour inclure l'indicateur du client 1:

define('CLIENT_LONG_PASSWORD', 1);
mysql_connect('[your server]', '[your username]', '[your password]', false, CLIENT_LONG_PASSWORD);

Cela m'a permis de me connecter avec succès.

Edit: comme par Garland du Pape commentaire, il peut ne pas être nécessaire pour définir CLIENT_LONG_PASSWORD manuellement dans votre code PHP de PHP 5.4!

9voto

Elliot Yap Points 426

vous pouvez faire ces lignes sur votre navigateur de requête mysql ou quelque chose

 SET old_passwords = 0;
UPDATE mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' limit 1;
SELECT LENGTH(Password) FROM mysql.user WHERE User = 'testuser';
FLUSH PRIVILEGES;
 

note: votre nom d'utilisateur et mot de passe

après cela, il devrait pouvoir travailler. Je viens de résoudre le mien aussi

7voto

Chad Skeeters Points 495

Sous OSX, j’utilisais MacPorts pour résoudre le même problème lors de la connexion à la base de données de mon siteground. Siteground semble utiliser 5.0.77mm0.1-log, mais la création d'un nouveau compte d'utilisateur n'a pas résolu le problème. C'est ce que fait

 sudo port install php5-mysql -mysqlnd +mysql5
 

Cela dégrade le pilote mysql que php utilisera.

2voto

Avait le même problème, mais exécuter les requêtes seul ne va pas aider. Pour résoudre ce problème, j'ai fait ce qui suit,

  1. Définissez old_passwords = 0 dans le fichier my.cnf
  2. Redémarrer mysql
  3. Se connecter à mysql en tant qu'utilisateur root
  4. Exécuter FLUSH PRIVILEGES;

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