MySQL 包含一个测试插件,用于检查账户凭证并将成功或失败记录到服务器错误日志中。这是一个可加载插件(不是内置的),必须在使用前安装。
测试插件的源代码与服务器源代码分离,类似于内置的本机插件,可以作为编写可加载身份验证插件的简单示例。
该插件仅供测试和开发目的使用,不适用于生产环境或公开网络服务器。
以下表格显示了插件和库文件名。文件名后缀可能因系统而异。文件必须位于由 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'