web-dev-qa-db-fra.com

L'authentification avec l'ancien mot de passe n'est plus prise en charge, utilisez des mots de passe de style 4.1

J'ai mon site web avec hostgator et je veux accéder à la base de données mysql avec l'application windows c # mais quand j'ai essayé de me connecter, j'ai reçu ce message 

"L'authentification avec l'ancien mot de passe n'est plus supportée, utilisez le style 4.1 Password"

J'ai essayé une solution donnée: 

SET SESSION old_passwords=0;
SET PASSWORD FOR user@Host=PASSWORD('your pw here');

la première requête a été exécutée avec succès, mais l'erreur "Accès refusé pour l'utilisateur @ Host" a été générée lors de l'exécution de la seconde requête. Je ne peux pas comprendre pourquoi il y a ce problème. J'utilise MySQL-connecter-net 6.6.5.

Je connecte avec succès ma base de données avec MySql Workbench 5.2.47.

Quelqu'un peut-il m'aider ce que je peux faire plus?


J'ai contacté mon site d'hébergement et ils modifient le fichier my.cnf pour utiliser un mot de passe de style 4.1. et je suis capable de me connecter avec mysql 

mysql -u <username> -p <password> -h <hostname>;

mais quand j'ai essayé de me connecter avec C # avec mySQL connecter net 6.6.5, j'ai encore eu cette erreur.

J'utilise Visual Studio 2012 avec le connecteur MySQL 6.6.5 sur Windows 8 64 bits. c'est le code que j'ai utilisé pour me connecter

using MySQL.Data.MySQLClient;

private void button1_Click(object sender, EventArgs e)
            {
                string connStr = String.Format("server={0};port={1};uid={2};password={3};database={4}",
                    txtserver.Text, txtPort.Text, txtUser.Text, txtPassword.Text, txtDatabase.Text);
                conn = new MySqlConnection(connStr);
                try
                {
                    conn.Open();
                    MessageBox.Show("Test Connection Succeded");
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

Je ne peux pas comprendre où est le problème. Aidez-moi, s'il vous plaît

21
user2237462

J'ai eu le même problème. Dans mon cas, il suffit d'exécuter la commande ci-dessous connectée à ma base de données par le Workbench:

SET SESSION old_passwords=0;
SET PASSWORD FOR my_user=PASSWORD('my_password');

Après cela, je pourrais me connecter en utilisant MySql Connector 6.6.5 dans le code c # avec la chaîne de connexion mysql commune:

"server=my_server_ip;user=my_user;database=my_db;port=3306;password=my_password;"
21
maxcnunes

Aujourd'hui, j'ai eu un problème similaire dans mon application C #. J'ai essayé de me connecter à un serveur sur hostgator.com (mysql) et de me connecter à localhost. Après avoir lu de nombreux articles et apporté de nombreuses modifications, j'ai suivi chaque étape, mais je n'ai pas pu me connecter à mon hôte mysql.

La solution dans mon cas était de changer la bibliothèque MySql Connector/NET de la version 6. * à la version 5. *. Après le changement, mon application s'est connectée avec succès.

Bien que cela ne soit peut-être pas une solution viable pour tout le monde, cela peut fonctionner pour certains.

5
diangelisj

J'ai rencontré ce problème aujourd'hui, mais je l'ai résolu comme suit:

SET old_passwords=FALSE;
SET PASSWORD = PASSWORD('new pwd here');

La version de connexion du serveur est peut-être inférieure à celle du client. Vous devez donc exécuter ceci: "SET old_passwords = FALSE;"

3
tai1001

Avait le même problème en utilisant le paquet MySqlClient pour C #. Décomposons:

Nous avons besoin de la base de données pour ne pas utiliser les mots de passe de style ancien, donc nous effectuons

SET old_passwords = 0;

NOTICEil n'y a pas de mot clé "SESSION". C’est ce qui permet uniquement à votre première requête de fonctionner. "SESSION" signifie temporaire et tous les paramètres de session sont perdus à la fin d’une session. 

Ensuite, nous devons définir le mot de passe de l'utilisateur @ hôte pour le nouveau style de mot de passe

SET PASSWORD FOR utilisateur @ Host = PASSWORD ('mot de passe');

Cela devrait permettre à votre MySqlClient 

2
Freestyle076

Oubliez l'application de SET old_password = 0 car si le serveur est configuré pour utiliser un nouveau mot de passe, il n'y a aucune raison de changer l'indicateur sur le serveur si votre application n'a plus accès. Examinez le connecteur NET que vous utilisez.

Le connecteur 6.5.4 est le bon pour utiliser old_password, les versions actuelles utilisent le nouveau.

La meilleure pratique consiste à éviter d'installer le connecteur sur la machine. Laissez le NET gérer la dll si vous l'avez déjà ou essayez de toute façon de trouver MySQL.Data.DLL version 6.5.4.0 (384 Ko)

1
Fabio Guerrazzi

Je voulais juste ajouter à @diangelisj répondre et dire que la racine du problème est la version de PhpMyAdmin installée sur votre serveur. Pour utiliser la dernière classe de connecteur de données MySQL, vous devez disposer de la dernière version de PhpMyAdmin (ou des problèmes peuvent survenir). Dans mon cas, j'ai PhpMyAdmin 4.0.10.7 et j'ai essayé d’utiliser MySQL Data Connector 6.7.9, ce qui a donné l’erreur.

Ce que j'ai fait:

  1. Télécharger la version 5.2.7 de https://dev.mysql.com/downloads/connector/net/6.9.html

  2. Ajouter .dll comme référence à l'application

  3. Presto!

1
James M

Aujourd'hui, j'ai trouvé le même problème. J'ai téléchargé Workbench. Il existe certains paramètres pour que Workbench connecte la base de données, comme suit: 1.sélectionnez l'onglet SSL, sélectionnez l'option 'non' dans " Utilisez SSL ". 2. sélectionnez l'onglet Avancé, sélectionnez dans Utiliser le protocole d'authentification ole . après que Workbench fonctionne . et suivez tai1001 'post . Ce sont toutes les étapes que j'ai trouvées.

0
patitta

Je viens de résoudre mon problème comme ceci:

1) Connectez-vous à la base de données avec mysql workbench (sélectionnez les options "use old auth" et "send pass in cleartext"

2) À l’aide du plan de travail, j’ai exécuté plusieurs fois les opérations suivantes (car il ne cessait de dire «0 lignes affectées»): (changez également l’ID utilisateur et le mot de passe en fonction de vos besoins)

SET SESSION old_passwords=0; 
SET PASSWORD FOR userID=PASSWORD('password');

SET SESSION old_passwords=false; 
SET PASSWORD FOR userID=PASSWORD('password');

3) Maintenant, retournez à votre application et elle devrait fonctionner ...

C'est comme ça que je l'ai fait au moins. J'utilise IX mysql et ils utilisent la vieille authentification sur leur serveur, vous devez donc faire quelque chose de votre côté ...

0
yoyo

Je n'ai pas réussi à résoudre le problème comme les autres qui ont répondu, bien que j'aie essayé tout ce qui a été proposé. En fin de compte, il s’est avéré que le serveur sur lequel se trouvait ma base de données n’était pas mis à jour depuis phpMyAdmin depuis la version 3.5.5, et qu’il est actuellement utilisé partout dans la version 4.1.14, ce qui pose un problème. La solution consiste à mettre à jour votre hôte phpMyAdmin ou votre propre MySQL vers une version antérieure afin de continuer à fonctionner sur une base de données distante. Vous aurez peut-être besoin de ces connaissances pour résoudre certains doutes. :)

0
Stanojkovic