Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

8.4.1.13 测试插件身份验证

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

测试插件的源代码与服务器源代码分离,类似于内置的本机插件,可以作为编写可加载身份验证插件的简单示例。

Note

该插件仅供测试和开发目的使用,不适用于生产环境或公开网络服务器。

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

表 8.30 测试身份验证插件和库文件名

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

要验证插件安装,请检查 Information Schema 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;
使用测试插件认证

要使用测试认证插件,创建一个账户并在 IDENTIFIED WITH 子句中指定该插件:

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 返回。

您可以在服务器错误日志中查找一条消息,指示认证是否成功(注意密码将被报告为 用户):

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