不再支持使用旧密码进行身份验证,请使用4.1样式密码

时间:2013-04-02 19:17:21

标签: c# mysql authentication

我的网站有hostgator,我想用C#windows应用程序访问mysql数据库但是当我尝试连接时收到了这条消息:

  

“不再支持使用旧密码进行身份验证,请使用4.1样式   密码“

我试过给定解决方案:

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

第一个查询执行成功但我在执行第二个查询时收到错误“用户@主机访问被拒绝”。我不明白为什么会出现这个问题。我使用的是MySQL-connecter-net 6.6.5。

我成功地将我的数据库与MySql workbench 5.2.47连接。

任何人都可以帮助我,我可以做些什么吗?


我已联系我的托管网站,他们对my.cnf文件进行了更改以使用4.1样式密码。我能够连接mysql

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

但是当我尝试使用mySQL连接器网6.6.5连接C#时,我再次收到此错误。

我在Windows 8 64位上使用带有MySQL连接器6.6.5的Visual Studio 2012。这是我用来连接的代码

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);
                }
            }

我无法理解问题所在。请帮帮我

9 个答案:

答案 0 :(得分:21)

我遇到了同样的问题。在我的例子中,只需通过Workbench运行我的数据库下面连接的命令:

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

之后,我可以使用常见的mysql连接字符串在c#代码中使用MySql Connector 6.6.5连接:

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

答案 1 :(得分:5)

今天我在C#应用程序中遇到了类似的问题。我尝试连接到hostgator.com(mysql)上的服务器并连接到localhost。在阅读了很多帖子并做了很多修改之后,每一步都跟着我无法连接到我的hostgator mysql。

我的解决方案是将MySql Connector / NET库从版本6. *更改为版本5. *。更改后,我的应用程序连接成功。

虽然这对每个人来说可能都不是一个可行的解决方案,但它可能适用于某些人。

答案 2 :(得分:3)

我今天遇到了这个问题,但我修好了如下:

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

好吧,也许服务器的连接版本低于客户端,所以你必须运行它:“SET old_passwords = FALSE;” 祝你好运!

答案 3 :(得分:2)

使用MySqlClient包进行C#时遇到同样的问题。让我们分解一下:

我们需要数据库不使用旧式密码,因此我们执行

  

SET old_passwords = 0;

通知没有&#34; SESSION&#34;关键词。这是只允许您的第一个查询工作的原因,&#34; SESSION&#34;表示临时,会话结束后会丢失任何会话设置。

接下来,我们需要将user @ host的密码设置为新的密码样式

  

为用户设置密码@ host = PASSWORD(&#39;密码&#39;);

这两个应该允许你的MySqlClient

答案 4 :(得分:1)

只是想添加@diangelisj的答案,并说问题的根源是服务器上安装的PhpMyAdmin版本。要使用最新的MySQL Data Connector类,您必须拥有最新的PhpMyAdmin(或出现问题)。在我的情况下,我有PhpMyAdmin 4.0.10.7并尝试使用MySQL数据连接器6.7.9,它给出了错误。

我做了什么:

  1. https://dev.mysql.com/downloads/connector/net/6.9.html

  2. 下载5.2.7版
  3. 添加.dll作为对应用程序的引用

  4. 的Presto!

答案 5 :(得分:1)

忘记应用SET old_password = 0,因为如果服务器配置为使用新密码,则如果您的应用程序不再访问,则没有理由更改服务器上的标志。调查您正在使用的连接器NET。

连接器6.5.4是使用old_password的正确版本,rencent版本正在使用新版本。

最佳做法是避免在机器上安装连接器,只需离开NET即可处理dll(如果已有)或者无论如何都要尝试查找MySQL.Data.DLL版本6.5.4.0(384千字节)< / p>

答案 6 :(得分:0)

我刚刚解决了我的问题:

1)使用mysql workbench连接到db(选择“use old auth”和“send pass in cleartext”

2)使用工作台,我运行了以下几次(因为它一直说'0行受影响'):(也将用户ID和密码更改为正确的东西)

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

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

3)现在回到你的应用程序,它应该运行...

至少我是这样做的。我正在使用IX mysql,他们确实在他们的服务器上使用旧的auth,所以你必须在你的最后做点什么......

答案 7 :(得分:0)

尽管我尝试了所有已提出的建议,但我还没有成功解决问题。 最后,事实证明,我的数据库所在的服务器自版本3.5.5以来没有更新phpMyAdmin,并且目前正在使用版本4.1.14,这是一个问题。 解决方案是将主机phpMyAdmin或您自己的mySQL更新回早期版本,以便继续使用远程数据库。 您可能需要这些知识才能解决已经出现的一些疑问。 :)

答案 8 :(得分:0)

今天我发现了同样的问题。我下载了Workbench。 Workbench有一些设置来连接数据库,如下所示: 1.选择标签SSL,在“使用SSL ”中选择选项“否”。 2.选择高级选项卡,选择使用ole认证协议。 在Workbench工作之后。 并按照tai1001'发布。 这就是我发现所有有用的步骤。