使用旧(4.1.1之前)身份验证协议的连接被拒绝(客户端选项' secure_auth'已启用)

时间:2013-05-10 22:46:31

标签: odbc mysql-error-1064

尝试使用Windows OBDC驱动程序连接MySQL数据库时遇到问题。有很多关于显而易见的搜索命中...人们正在使用旧版本,但是,我不是。

mysqld位于CentOS 6.4 32位

./usr/libexec/mysqld  Ver 5.1.69 for redhat-linux-gnu on i386 (Source distribution)

enter image description here

所以我无法理解4.1.1协议的来源。有什么想法吗?

7 个答案:

答案 0 :(得分:10)

我想如果你问正确的问题就更容易找到答案。

在这种情况下,“我的”问题与密码如何散列并存储在数据库中有关。传统密码使用较短的哈希存储,现在已弃用。

一些要点:

mysql_upgrade不能也不会升级密码,也不会在某些版本中对其发出警告,请参阅:http://bugs.mysql.com/bug.php?id=65461

即使您拥有大多数最新的服务器和客户端,只需要一个遗留客户端来创建旧密码,然后无论客户尝试使用该帐户,您都将无法使用该帐户。

不同版本对情况的处理方式不同,因此您可以坐在数据库中的某些旧密码上,然后突然间,一些帐户停止工作......这是因为不同的版本选择处理这种情况

您无法升级密码。你必须知道它们是什么,你必须改变它们。

编辑:为了更清楚,您必须使用使用较长哈希的新客户端更改使用较短哈希存储的密码。通过这样做,您将使用更长的哈希编写该帐户密码,此时不应该标记尝试访问该帐户的任何操作。如果问题是经常性的,那么您应该在您的站点上查找仍在使用不推荐的哈希长度编写密码的旧客户端。

答案 1 :(得分:9)

管理服务器连接,连接选项卡,高级子选项卡中的MySQL Workbench 6.08,您必须选中使用旧身份验证协议框。'

答案 2 :(得分:3)

尝试安装旧版本驱动程序3.51.30:http://dev.mysql.com/downloads/connector/odbc/5.1.html#downloads 它适用于我的Mysql Ver 5.0.24a-community

答案 3 :(得分:3)

我在使用ODBC Connector for Windows连接到Percona 5.5服务器时遇到了这个问题。其中secure_auth已停用。

我发现ODBC连接器与MySql Workbench不同,它不支持对使用旧的16字节散列密码的登录进行身份验证的选项。有关于此的错误报告,但似乎受让人对功能请求感到困惑(请参阅bug #71234)。

我能够使用以下命令更新mysql登录以使用新的41字节哈希:

 set old_passwords=0;
 set password=password('yourpasswordhere');

正如我所提到的,我们的服务器已禁用secure_auth,这似乎会导致password()返回old_password()个结果。运行set old_passwords=0;将使password()方法生成新的41字节哈希值(在会话期间)。

答案 4 :(得分:1)

远程尝试访问MySQL数据库时,我收到类似的错误消息。使用Directadmin我很容易改变MySql数据库密码,如上所述。这会使用较新的哈希方法自动生成密码。这立即解决了远程连接问题。

答案 5 :(得分:0)

我找到了另一个解决方案,以防任何人遇到这个 - 非常奇怪 -

  1. 安装5.1 64位ODBC驱动程序 - 验证ODBC连接本身是否正常工作,如果可以连接则应该能够执行#2
  2. 单击Linked Servers - Providers - 右键单击​​MSDASQL,单击Properties
    • 取消选中“允许进程” - 除非您需要插入TEXT和NTEXT字段,否则这是一件好事。
  3. 创建您的链接服务器连接或测试您一直在与之战斗的连接 - lol
  4. 当我检查“允许进程”时,即使ODBC系统DSN工作正常,我仍然会收到错误。我假设因为我混合了5.2(服务器工作正常)和5.1服务器没有,SQL正在共享进程,因为5.1驱动程序没有给出错误。

答案 6 :(得分:0)

如果您无法更改服务器,也许您可​​以更改您的客户:http://bugs.mysql.com/bug.php?id=75425