“身份验证插件'caching_sha2_password'

Posted

技术标签:

【中文标题】“身份验证插件\'caching_sha2_password\'【英文标题】:"Authentication plugin 'caching_sha2_password'“身份验证插件'caching_sha2_password' 【发布时间】:2018-10-02 10:54:21 【问题描述】:

我是 mysql 环境的新手并已安装: MySQL 使用以下命令:

sudo apt-get update
sudo apt-get install mysql-server
mysql_secure_installation

还安装了mysql工作台。

但是当我尝试连接本地主机时,出现以下错误:

“无法加载身份验证插件'caching_sha2_password':/usr/lib/mysql/plugin/caching_sha2_password.so:无法打开共享对象文件:没有这样的文件或目录”

即使这是我第一次在 *** 中发布问题,对于我的演示错误和语法感到抱歉。

【问题讨论】:

我对 5.7.22 也有同样的问题。 5.7.21 工作正常 @igor 我在 5.7.21 上安装了它,专门针对带有 5.7.21 客户端的 Dockerised 8.0.11 服务器运行,降级我的 Docker 映像以匹配客户端版本回避了这个问题。这是客户端和服务器版本之间的版本不匹配问题。 这里也使用 dockerised 8.01 映像 【参考方案1】:

最新的 MYSQL 版本将“caching_sha2_password”作为默认身份验证类型。不允许远程连接到 MYSQL 并导致 cache_sha2_password 插件错误。 我已经修复了它使用

ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';

现在它允许您的用户从本地主机访问 MySQL。

如果您想从多个远程主机访问 MySQL,请执行以下操作, **

ALTER USER 'yourusername'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

** 在 SQL 中的每个 alter 命令运行后,执行以下命令才能生效。

刷新特权;

或重启 MySQL 服务器

【讨论】:

【参考方案2】:

在 my.cnf 文件中添加以下行:

default-authentication-plugin=mysql_native_password

然后重启服务器。

【讨论】:

恕我直言,在整个 MySQL/MariaDB/php/etc 领域的 sha2 缓存密码插件转换已经非常出色地实现了。这令人困惑和沮丧。你的回答是非正统的,但让我快速恢复并运行。【参考方案3】:

更多细节在这里: caching_sha2_password 插件是 MySQL 8 服务器上新的默认身份验证插件。只有那个 MySQL 8 发行版的 libmysql 库拥有这个插件,并且它静态构建到 libmysql - 各种客户端的 C 连接器。 caching_sha2_password 是 not available separately for downloading。

这是 libmysql 第一次静态包含一个重要的插件。这会导致任何其他 libmysql(包括 libmariadb 和旧的 libmysql)不使用定义为使用 caching_sha2_password 身份验证的用户连接到 MySQL 8。

我只是希望来自 MariaDB 的人能很好地将 caching_sha2_password 包含在他们的 libmariadb 中,以恢复 MySQL 和 MariaDB 之间的直接兼容。

来自 MySQL 的server blog:

在 MySQL 8.0.3 中添加了对 caching_sha2_password 的支持。年长的 libmysqlclient 的版本不支持这个插件。所以,虽然 使用 libmysqlclient 的客户端工具比可用的 MySQL 8.0.3 可以使用以下用户连接到 MySQL 8.0.4 服务器 其他身份验证插件,例如 mysql_native_password 或 sha256_password,这样的客户端无法连接到 MySQL 8.0.4 服务器 使用需要caching_sha2_password 支持的用户。 升级数据库,这意味着使用现有用户帐户进行连接 应该不会遇到任何问题。

【讨论】:

注意:这也意味着很难将任何 32 位 MS Windows 客户端与 MySQL 8.0.3 一起使用,因为它们强制禁止对 32 位 Windows 的连接器/C 库进行源代码编译。 了解这一点很重要,因为在大多数 Linux 发行版中,比如 Debian 9,当我们配置包管理时,我们会得到 Mysql 8.0.1X。所以我们可以在 my.cnf 文件中使用 mysql_native_password。 请注意,同时 MariaDB 在其server downloads 的lib/plugin/ 文件夹中提供了该caching_sha2_password 插件的32 + 64 位版本。【参考方案4】:

所以我找到了该错误消息的原因(至少对于我而言)。 这是因为 MySQL 8.04 及更高版本使用caching_sha2_password 作为以前使用mysql_native_password 的默认身份验证插件。

这显然会导致与需要mysql_native_password 身份验证的旧服务的兼容性问题。

解决方案:

    检查您使用的客户端服务的更新版本 使用(例如最近的工作台)。

    将 MySQL 服务器降级到低于该更改的版本。

    根据每个用户更改身份验证插件(我没有找到全局选项,但也许有一个)。

现在关于选项 3,这就像更改用户一样简单:

ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pw';

或者在创建用户时:

CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

See MySQL Server Blog

See Oracle

【讨论】:

在尝试选项 3 时,我收到的消息是“没有错误 0 行受影响”所以我认为它没有做任何事情。 我还收到了“0 行受影响”消息,但它确实更新了用户并且我能够连接。

以上是关于“身份验证插件'caching_sha2_password'的主要内容,如果未能解决你的问题,请参考以下文章