8.4.1.12 测试插件式认证
MySQL 包含一个测试插件,用于检查帐户凭证并将成功或失败记录到服务器错误日志中。这是一个可加载插件(不是内置的),必须在使用前安装。
测试插件的源代码与服务器源代码分开,unlike the built-in native plugin,所以它可以作为一个相对简单的示例,演示如何编写可加载身份验证插件。
这个插件旨在用于测试和开发目的,并且不适用于生产环境或公开网络服务器上。
以下表格显示了插件和库文件名称。文件名称后缀可能会因系统而异。文件必须位于名为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'