Documentation Home

B.3.2.4 客户端不支持认证协议

身份验证协议的当前实现使用密码散列算法,该算法与旧版(4.1 之前)客户端使用的算法不兼容。尝试使用较旧的客户端连接到 4.1 或更高版本的服务器可能会失败,并显示以下消息:

$> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

针对这个问题,首选的解决方案是将所有客户端程序升级为使用4.1.1或更高版本的客户端库。如果这不可能,请使用以下方法之一:

  • 要使用 4.1 之前的客户端程序连接到服务器,请使用仍然具有 4.1 之前样式密码的帐户。

  • 为每个需要使用 pre-4.1 客户端程序的用户将密码重置为 pre-4.1 样式。这可以使用SET PASSWORD 语句和 OLD_PASSWORD()函数来完成。从 MySQL 5.6.6 开始,还需要首先确保帐户的身份验证插件是 mysql_old_password

    mysql> UPDATE mysql.user SET plugin = 'mysql_old_password'
    mysql> WHERE User = 'some_user' AND Host = 'some_host';
    mysql> FLUSH PRIVILEGES;
    mysql> SET PASSWORD FOR
        -> 'some_user'@'some_host' = OLD_PASSWORD('new_password');

    将上例中的“ new_password 替换为您要使用的密码 。MySQL 无法告诉您原始密码是什么,因此您需要选择一个新密码。

  • 告诉服务器默认使用旧的密码哈希算法:

    1. 将 系统变量设置为 1 启动mysqld 。old_passwords

    2. 为每个已将其密码更新为更长的 4.1 格式的帐户分配一个旧格式密码。您可以使用以下查询识别这些帐户:

      mysql> SELECT Host, User, Password FROM mysql.user
          -> WHERE LENGTH(Password) > 16;

      对于查询显示的每个帐户记录,使用HostUser值并使用前面描述的方法之一分配密码。

Client does not support authentication protocol如果安装了多个版本的 MySQL 但客户端程序动态链接并链接到较旧的库,也会发生 该错误。确保客户端使用与其兼容的最新库版本。执行此操作的过程取决于您的系统。

笔记

PHPmysql扩展不支持 MySQL 4.1.1 及更高版本中的身份验证协议。无论使用何种 PHP 版本,都是如此。如果您希望将mysql扩展与 MySQL 4.1 或更高版本一起使用,您可能需要遵循上面讨论的选项之一来配置 MySQL 以与旧客户端一起使用。该mysqli扩展(代表“MySQL,改进”;在 PHP 5 中添加)与 MySQL 4.1 及更高版本中采用的改进密码散列兼容,无需对 MySQL 进行特殊配置即可使用此 MySQL 客户端库。有关mysqli扩展的更多信息,请参阅 http://php.net/mysqli

有关密码散列和身份验证的其他背景,请参阅第 6.1.2.4 节,“MySQL 中的密码散列”