MySQL 包含一个 mysql_native_password
插件,该插件实现了原生身份验证;也就是说,身份验证基于引入可插拔身份验证之前使用的密码散列方法。
mysql_native_password
身份验证插件已弃用,并将在未来版本的 MySQL 中删除。
下表显示了服务器端和客户端的插件名称。
表 8.15 原生密码身份验证的插件和库名称
插件或文件 | 插件或文件名 |
---|---|
服务器端插件 | mysql_native_password |
客户端插件 | mysql_native_password |
库文件 | 无(插件是内置的) |
以下部分提供了特定于原生可插拔身份验证的安装和使用信息
有关 MySQL 中可插拔身份验证的一般信息,请参阅 第 8.2.17 节“可插拔身份验证”。
mysql_native_password
插件以服务器和客户端形式存在
服务器端插件内置于服务器中,但默认情况下处于禁用状态。要启用它,请使用
--mysql-native-password=ON
启动 MySQL 服务器,或者在 MySQL 配置文件的[mysqld]
部分包含mysql_native_password=ON
。客户端插件内置于
libmysqlclient
客户端库中,并且可用于链接到libmysqlclient
的任何程序。
MySQL 8.4(及更高版本)中的 MySQL 客户端程序默认使用 caching_sha2_password
进行身份验证。如果需要,请使用 --default-auth
选项将 mysql_native_password
设置为默认的客户端身份验证插件,如下所示
$> mysql --default-auth=mysql_native_password ...
在 MySQL 8.4 中,默认情况下禁用 mysql_native_password
服务器端插件。要保持禁用状态,请确保在启动服务器时未指定 --mysql-native-password
选项。使用 --mysql-native-password=OFF
也可以达到此目的,但不是必需的。此外,不要在 MySQL 配置文件中启用 mysql_native_password
以保持禁用状态。
禁用插件后,所有依赖于该插件的操作都将无法访问。具体来说
使用
mysql_native_password
进行身份验证的已定义用户帐户在尝试连接时会遇到错误。$> MYSQL -u userx -p ERROR 1045 (28000): Access denied for user 'userx'@'localhost' (using password: NO)
服务器会将这些错误写入服务器日志。
尝试创建新用户帐户或更改使用
mysql_native_password
标识的现有用户帐户也会失败并发出错误。mysql> CREATE USER userxx@localhost IDENTIFIED WITH 'mysql_native_password'; ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded mysql> ALTER USER userxy@localhost IDENTIFIED WITH 'mysql_native_password; ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
有关启用插件的说明,请参阅 安装原生可插拔身份验证。