【问题标题】:Authentication with old password no longer supported, use 4.1 style passwords不再支持使用旧密码进行身份验证,请使用 4.1 样式密码
【发布时间】:2013-03-24 05:47:31
【问题描述】:

我的网站带有 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);
                }
            }

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

【问题讨论】:

  • 尝试为您的真实数据库用户更改“user@host”。 (user@host 只是一个例子)

标签: c# mysql authentication


【解决方案1】:

我遇到了同样的问题。在我的情况下,只需运行以下通过 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;"

【讨论】:

  • 由于 OP 没有运行SET PASSWORD FOR ... 的权限,他们可能会简单地尝试SET PASSWORD = PASSWORD('my_password');(为当前用户设置密码,无需特殊权限)。
  • 是否运行 SET SESSION old_passwords=0;对使用同一台服务器的现有应用程序/连接有什么影响?
【解决方案2】:

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

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

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

【讨论】:

  • 节省了一天!!非常感谢。
  • @diangelisj 我尝试了所有解决方案,但这个解决方案对我有用,你想解释一下为什么会发生这种情况我们可以使用 6.9 Mysql 连接器、dll 并修复这个错误
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    SET old_passwords=0;

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

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

    为 user@host 设置密码 = PASSWORD('password');

    这两个应该允许你的 MySqlClient

    【讨论】:

    • 这每次都有效,我将写一个很长的自述文件来提醒我这一点。我们有一个旧的 5.1 MySQL,我不小心弄掉了大部分密码。在设置旧密码 = 0 之前,从 Linux 命令行中连接的所有内容,但不是 C# 应用程序。谢谢你的回答。 (再次)保释我。
    【解决方案5】:

    只是想添加到@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. Presto!

    【讨论】:

      【解决方案6】:

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

      Connector 6.5.4 是使用 old_password 的正确版本,最新版本使用的是新版本。

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

      【讨论】:

        【解决方案7】:

        我只是这样解决了我的问题:

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-04-18
              • 2014-06-25
              • 2020-02-28
              • 2015-12-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多