21

我的网站带有 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 工作台 5.2.47 连接起来。

任何人都可以帮助我做更多的事情吗?


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

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

但是当我尝试使用 mySQL 连接器 net 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);
                }
            }

我不明白问题出在哪里。请帮我

4

9 回答 9

21

我有同样的问题。在我的情况下,只需运行以下通过 Workbench 连接到我的数据库的命令:

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

之后,我可以在 c# 代码中使用 MySql Connector 6.6.5 与通用 mysql 连接字符串进行连接:

"server=my_server_ip;user=my_user;database=my_db;port=3306;password=my_password;"
于 2013-04-13T15:13:41.243 回答
4

今天我在我的 C# 应用程序中遇到了类似的问题。我尝试连接到 hostgator.com (mysql) 上的服务器并连接到 localhost。在阅读了许多帖子并进行了许多更改之后,遵循了每一步,但我无法连接到我的 hostgator mysql。

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

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

于 2013-09-10T17:59:31.487 回答
3

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

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

SET old_passwords=0;

注意没有“SESSION”关键字。这是只允许您的第一个查询工作的原因,“SESSION”意味着临时的,并且任何会话设置在会话结束后都会丢失。

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

为用户@主机设置密码=密码('密码');

这两个应该允许你的 MySqlClient

于 2014-07-22T21:43:15.093 回答
3

我今天遇到了这个问题,但我已将其修复如下:

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

那么,可能服务器的连接版本低于客户端,所以你必须运行这个:“SET old_passwords=FALSE;” 祝你好运!

于 2013-12-21T13:19:47.693 回答
1

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

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

最好的做法是避免在机器上安装连接器,如果您已经拥有 dll,只需让 NET 处理 dll,或者无论如何尝试查找 MySQL.Data.DLL 版本 6.5.4.0 (384 kbytes)

于 2018-01-10T10:08:19.547 回答
1

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

我做了什么:

  1. 从https://dev.mysql.com/downloads/connector/net/6.9.html下载 5.2.7 版

  2. 添加 .dll 作为应用程序的引用

  3. 快!

于 2015-10-27T17:15:40.263 回答
0

尽管我尝试了所有提出的建议,但我并没有像其他回应的人那样设法解决问题。最后事实证明,我的数据库所在的服务器自 3.5.5 版以来没有更新 phpMyAdmin,并且目前在 4.1.14 版中到处使用,这是一个问题。解决方案是将您的主机 phpMyAdmin 或您自己的 mySQL 更新回早期版本,以便继续在远程数据库上工作。您可能需要这些知识来解决出现的一些疑问。:)

于 2014-05-04T10:32:39.173 回答
0

我刚刚解决了我的问题,就像这样:

1)使用mysql工作台连接到数据库(选择“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,他们确实在他们的服务器上使用旧的身份验证,所以你必须在你的最后做一些事情......

于 2014-01-07T15:41:57.817 回答
0

今天我发现了同样的问题。我下载了工作台。工作台连接数据库有一些设置,如下: 1.选择选项卡 SSL ,在“使用 SSL ”中选择选项'no'。2.选择tab advanced,在Use the ole authentication Protocol中选择。在工作台工作之后。并关注 tai1001 的帖子。这就是我发现所有可行的步骤。

于 2015-08-18T10:07:18.300 回答