MySQL 包含一个测试插件,用于检查帐户凭据并将成功或失败记录到服务器错误日志中。这是一个可加载的插件(非内置),必须在使用前安装。
测试插件源代码与服务器源代码是分开的,不像内置的原生插件,所以它可以作为一个相对简单的示例来检查,演示如何编写可加载的身份验证插件。
此插件旨在用于测试和开发目的,不适用于生产环境或暴露于公共网络的服务器。
下表显示了插件和库文件名。文件名后缀在您的系统上可能不同。该文件必须位于
plugin_dir
系统变量命名的目录中。
表 6.15 用于测试身份验证的插件和库名称
插件或文件 | 插件或文件名 |
---|---|
服务器端插件 | test_plugin_server |
客户端插件 | auth_test_plugin |
库文件 | auth_test_plugin.so |
以下部分提供特定于测试可插入身份验证的安装和使用信息:
有关 MySQL 中可插入身份验证的一般信息,请参阅第 6.2.11 节,“可插入身份验证”。
本节介绍如何安装服务端测试认证插件。有关安装插件的一般信息,请参阅第 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
系统表中,使服务器在后续每次正常启动时加载它,而无需--plugin-load-add
.
要验证插件安装,请检查
INFORMATION_SCHEMA.PLUGINS
表格或使用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;
SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD('testpassword');
然后在连接到服务器时为该帐户提供--user
和
选项。--password
例如:
$> mysql --user=testuser --password
Enter password: testpassword
该插件获取从客户端收到的密码,并将其与
系统表authentication_string
中帐户行列中存储的值进行比较。mysql.user
如果两个值匹配,插件将返回该
authentication_string
值作为新的有效用户 ID。
您可以在服务器错误日志中查找指示身份验证是否成功的消息(注意密码被报告为“用户”):
[Note] Plugin test_plugin_server reported:
'successfully authenticated user testpassword'