8.4.1.1 本地插件式认证
MySQL 包含一个名为 mysql_native_password
的插件,该插件实现了本地认证;即基于在引入可插拔认证之前使用的密码哈希方法进行的认证。
mysql_native_password
认证插件已被弃用,并且可能在未来的 MySQL 版本中被移除。
以下表格显示了服务器和客户端的插件名称。
表 8.15 本地密码认证插件和库文件名
Plugin or File | Plugin or File Name |
---|---|
服务器端插件 | 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 客户端程序在 MySQL 8.4 及更高版本中默认使用 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
要了解如何启用插件,请参阅 安装本地可插拔认证。