2013-08-02 77 views
10

我已经进行了很好的搜索,但还没有找到答案,可以让我纠正这个问题。由于“身份验证协议被拒绝”导致MySQL ODBC链接失败

我想从MS Access连接到远程服务器上的MySQL 5.2数据库。

我已经设置了一个用户帐户,该帐户在所涉及的表上选择,插入,更新,删除特权。然而,当我尝试使用此帐户连接,我得到:使用旧的(预4.1.1)认证协议

连接失败[HY000] [MySQL的] [ODBC 5.2(w)的驱动程序]连接拒绝(客户端选项“secure_auth”启用)

当我试着使用root帐户访问,连接工作,这让我不知道为什么它返回一个验证协议错误,因为正在使用相同的驱动程序 - 所有改变的都是使用的帐户 - 所以肯定是通过相同的身份验证协议传递密码?为什么一个用户名/密码组合会返回一个协议错误,但不是另一个?

看来这个错误很常见,但我还没有找到答案,给出了一个明确的解决方案。你能帮我吗?

回答

9

这里的问题是由于两个并发问题。

  1. 在远程服务器上,全局设置OLD_PASSWORDS被设置为1 - 表示密码在4.1之前的方法中被哈希。
  2. 尽管进行了全局设置(大概是在设置此参数之前输入了该参数),但仍然使用较新的哈希方法对root帐户进行了编码,这意味着它已通过ODBC连接被授予访问权限,因为新的哈希值已被识别。

全局设置导致MySQL中的PASSWORD()函数将旧方法中的所有输入值散列为散列值,而不是按照它应该的新方法散列。

我假定DBA已经OLD_PASSWORDS设置为1良好的原因,以便作为溶液我用

设置会话old_passwords = 0; 为'user'设置密码@'%'=密码('mypassword');

使用PASSWORD()函数,因为全局设置OLD_PASSWORDS = 1导致它使用相同的散列为OLD_PASSWORD()函数过去并不成功。会话设置允许它产生正确的密码。

1

我得到相同的错误信息,而我的同事没有任何问题。我试图使用MySQL ODBC驱动程序5.1.13(最新的GA版本),她有5.1.12。当我安装5.1.12时,我没有任何问题。

+0

很好的答案,网站已启动并运行! WOO !!!! –

3

“当我安装了5.1.12代替,我没有问题”

同上!使用ODBC驱动程序版本5.1.12成功验证到MySQL。我不知道为什么MySQL不提供更好的方式来处理这个错误w /它的新驱动程序,但我可以确认使用ODBC驱动程序5.1.12是否工作。

以下是指向5.1.12 ODBC驱动程序安装页面的链接。

http://dev.mysql.com/downloads/file.php?id=411741