由于“身份验证协议被拒绝”,MySQL ODBC链接失败

时间:2013-08-02 12:51:18

标签: mysql ms-access authentication odbc

我有一个很好的搜索,但还没有找到一个答案,可以让我纠正这个问题。

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

我已经设置了一个用户帐户,该帐户对相关表格具有选择,插入,更新,删除权限。但是,当我尝试连接此帐户时,我得到:

  
    

连接失败[HY000] [MySQL] [ODBC 5.2(w)驱动程序]使用旧的(4.1.1之前的)身份验证协议拒绝连接(客户端选项'secure_auth'已启用)

  

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

这个错误似乎很常见,但我还没有找到一个明确的解决方案。你能帮忙吗?

3 个答案:

答案 0 :(得分:9)

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

  1. 在远程服务器上,全局设置OLD_PASSWORDS设置为1 - 表示在4.1之前的方法中对密码进行了哈希处理。
  2. 虽然全局设置(可能是在设置此参数之前已输入),但root帐户已在较新的散列方法中进行编码,这意味着它已被授予通过ODBC连接的访问​​权限,因为新的散列已被识别。
  3. 全局设置导致MySQL中的PASSWORD()函数在旧方法中散列任何输入的值而不是新方法。

    我认为DBA将OLD_PASSWORDS设置为1是有充分理由的,所以作为我使用的解决方案

      
        

    设置会话old_passwords = 0;     设置'用户' @'%'的密码=密码(' mypassword');

      

    使用password()函数之前没有工作,因为全局设置OLD_PASSWORDS = 1导致它使用与OLD_PASSWORD()函数相同的散列。会话设置允许它生成正确的密码。

答案 1 :(得分:3)

"当我安装5.1.12时,我没有遇到任何问题"

同上!刚刚使用ODBC驱动程序版本5.1.12成功验证了MySQL。我不知道为什么MySQL没有提供更好的方法来处理这个错误与其较新的驱动程序,但我可以确认使用ODBC驱动程序5.1.12 DOES工作。

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

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

答案 2 :(得分:1)

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

相关问题