Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Test Pluggable Authentication

8.4.1.12 测试插件式认证

MySQL 包含一个测试插件,用于检查帐户凭证并将成功或失败记录到服务器错误日志中。这是一个可加载插件(不是内置的),必须在使用前安装。

测试插件的源代码与服务器源代码分开,unlike the built-in native plugin,所以它可以作为一个相对简单的示例,演示如何编写可加载身份验证插件。

Note

这个插件旨在用于测试和开发目的,并且不适用于生产环境或公开网络服务器上。

以下表格显示了插件和库文件名称。文件名称后缀可能会因系统而异。文件必须位于名为plugin_dir系统变量指定的目录中。

表8.28 测试插件和库文件名称

Plugin or File Plugin or File Name
服务器插件 test_plugin_server
客户端插件 auth_test_plugin
库文件 auth_test_plugin.so

以下部分提供了特定于测试插件式认证的安装和使用信息:

关于 MySQL 中的可加载身份验证的通用信息,请见第8.2.17节,“可加载身份验证”

安装测试插件式认证

本部分描述了如何安装服务器测试插件式认证插件。关于安装插件的通用信息,请见第7.6.1节,“安装和卸载插件”

为了使插件可由服务器使用,插件库文件必须位于 MySQL 插件目录(名为plugin_dir系统变量指定的目录中)。如果必要,可以通过设置plugin_dir系统变量来配置插件目录的位置。

要在服务器启动时加载插件,可以使用--plugin-load-add选项来指定包含插件的库文件。使用这个插件加载方法时,选项必须在每次启动服务器时给出。例如,在服务器my.cnf文件中添加以下行,根据平台调整.so后缀为必要:

[mysqld]
plugin-load-add=auth_test_plugin.so

修改my.cnf文件后,重新启动服务器以使新的设置生效。

另外,可以在运行时加载插件,使用以下语句,根据您的平台调整.so后缀:

INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';

INSTALL PLUGIN立即加载插件,并将其注册到mysql.plugins系统表中,以便在每次正常启动服务器时自动加载,不需要--plugin-load-add选项。

验证插件安装,查看信息架构PLUGINS表或使用SHOW PLUGINS语句(见第7.6.2节,“获取服务器插件信息”)。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%test_plugin%';
+--------------------+---------------+
| PLUGIN_NAME        | PLUGIN_STATUS |
+--------------------+---------------+
| test_plugin_server | ACTIVE        |
+--------------------+---------------+

如果插件初始化失败,检查服务器错误日志以获取诊断信息。

将 MySQL 账户与测试插件关联,见使用测试插件认证

卸载测试插件认证

卸载测试插件认证的方法取决于您如何安装它:

  • 如果使用--plugin-load-add选项在服务器启动时安装插件,重新启动服务器并删除该选项。

  • 如果使用INSTALL PLUGIN语句在运行时安装插件,它将在服务器重启后仍然安装。要卸载它,请使用UNINSTALL PLUGIN语句:

    UNINSTALL PLUGIN test_plugin_server;
使用测试插件认证

使用测试插件认证,创建一个账户并将其名称指定为插件在--user子句中:

CREATE USER 'testuser'@'localhost'
IDENTIFIED WITH test_plugin_server
BY 'testpassword';

测试插件认证也需要创建一个代理用户:

CREATE USER testpassword@localhost;
GRANT PROXY ON testpassword@localhost TO testuser@localhost;

然后,在连接到服务器时提供--user--password选项以便使用该账户。例如:

$> mysql --user=testuser --password
Enter password: testpassword

插件将从客户端接收的密码与存储在mysql.user系统表中的authentication_string列的值进行比较。如果两个值匹配,插件将返回authentication_string值作为新的有效用户 ID。

您可以在服务器错误日志中查找是否认证成功的信息(注意密码将被报告为user):

[Note] Plugin test_plugin_server reported:
'successfully authenticated user testpassword'