扩展 MySQL 8.4  /  ...  /  使用身份验证插件

4.4.9.3 使用身份验证插件

要编译和安装插件库文件,请使用 第 4.4.3 节 “编译和安装插件库” 中的说明。要使库文件可用,请将其安装在插件目录中(由 plugin_dir 系统变量指定的目录)。

将服务器端插件注册到服务器。例如,要在服务器启动时加载插件,请使用 --plugin-load=auth_simple.so 选项,根据需要调整 .so 后缀。

为服务器将使用 auth_simple 插件进行身份验证的用户创建一个用户

mysql> CREATE USER 'x'@'localhost'
    -> IDENTIFIED WITH auth_simple;

使用客户端程序以用户 x 的身份连接到服务器。服务器端 auth_simple 插件与客户端程序通信,告诉它应该使用客户端 auth_simple 插件,后者将密码发送到服务器。服务器插件应该拒绝发送空密码的连接,并接受发送非空密码的连接。以每种方式调用客户端程序以验证这一点。

$> mysql --user=x --skip-password
ERROR 1045 (28000): Access denied for user 'x'@'localhost' (using password: NO)

$> mysql --user=x --password
Enter password: abc
mysql>

由于服务器插件接受任何非空密码,因此它应该被认为是不安全的。在测试插件以验证其工作后,重新启动服务器,不要使用 --plugin-load 选项,这样就不会意外地使服务器运行时加载不安全的身份验证插件。另外,使用 DROP USER 'x'@'localhost' 删除该用户。

有关加载和使用身份验证插件的更多信息,请参阅 安装和卸载插件,以及 可插拔身份验证

如果您正在编写支持使用身份验证插件的客户端程序,通常此类程序会通过调用 mysql_options() 来设置 MYSQL_DEFAULT_AUTHMYSQL_PLUGIN_DIR 选项来加载插件。

char *plugin_dir = "path_to_plugin_dir";
char *default_auth = "plugin_name";

/* ... process command-line options ... */

mysql_options(&mysql, MYSQL_PLUGIN_DIR, plugin_dir);
mysql_options(&mysql, MYSQL_DEFAULT_AUTH, default_auth);

通常,该程序还将接受 --plugin-dir--default-auth 选项,使用户能够覆盖默认值。

如果客户端程序需要更低级别的插件管理,客户端库包含接受 st_mysql_client_plugin 参数的函数。请参阅 C API 客户端插件接口