6.4.1.12 测试可插入身份验证

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

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

Note

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

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

table6.19 用于测试身份验证的插件和库名称

插件或文件插件或文件名
Server-side plugintest_plugin_server
Client-side pluginauth_test_plugin
Library fileauth_test_plugin.so

以下各节提供特定于测试可插入身份验证的安装和使用信息:

有关 MySQL 中可插拔身份验证的一般信息,请参见第 6.2.13 节“可插入身份验证”

安装测试可插入身份验证

本节介绍如何安装测试身份验证插件。有关安装插件的一般信息,请参见第 5.5.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系统 table 中,以使服务器为每次后续的正常启动加载该插件,而无需--plugin-load-add

要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINStable 或使用SHOW PLUGINS语句(请参见第 5.5.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';

然后,当您连接到服务器时,为该帐户提供--user--password选项。例如:

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

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

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

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