【问题标题】:MySQL ODBC Link Fails due to "authentication protocol refused"由于“身份验证协议被拒绝”,MySQL ODBC 链接失败
【发布时间】:2013-08-03 18:01:53
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: mysql ms-access authentication odbc


    【解决方案1】:

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

    1. 在远程服务器上,全局设置 OLD_PASSWORDS 设置为 1 - 这意味着密码在 4.1 之前的方法中进行哈希处理。
    2. 尽管有全局设置(可能是在设置此参数之前输入的),root 帐户已以较新的散列方法编码,这意味着它通过 ODBC 连接被授予访问权限,因为新散列已被识别。

    全局设置导致 MySQL 中的 PASSWORD() 函数对旧方法中的任何输入值进行散列,而不是像它应该的那样对新方法进行散列。

    我认为 DBA 将 OLD_PASSWORDS 设置为 1 是有充分理由的,因此我使用了一个解决方案

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

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

    【讨论】:

      【解决方案2】:

      “当我安装 5.1.12 时,我没有问题”

      同上!刚刚使用 ODBC 驱动程序版本 5.1.12 成功通过 MySQL 身份验证。我不知道为什么 MySQL 没有提供更好的方法来处理带有较新驱动程序的此错误,但我可以确认使用 ODBC 驱动程序 5.1.12 确实有效。

      这里是5.1.12 ODBC驱动安装页面的链接。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2020-10-16
          • 1970-01-01
          • 2014-02-02
          • 1970-01-01
          • 2023-04-06
          • 2015-07-05
          • 1970-01-01
          • 1970-01-01
          • 2019-03-26
          相关资源
          最近更新 更多