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 客户端插件接口