文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  测试可插拔身份验证

8.4.1.11 测试可插拔身份验证

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

与内置的原生插件不同,测试插件源代码与服务器源代码是分开的,因此可以将其作为演示如何编写可加载身份验证插件的相对简单的示例进行检查。

注意

此插件仅用于测试和开发目的,不适用于生产环境或暴露于公共网络的服务器。

下表显示了插件和库文件名。 文件名后缀在您的系统上可能有所不同。 该文件必须位于 plugin_dir 系统变量命名的目录中。

表 8.27 测试身份验证的插件和库名称

插件或文件 插件或文件名
服务器端插件 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;
使用测试可插拔身份验证

要使用测试身份验证插件,请创建一个帐户并在 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'