我正在创建一个 MySQL 身份验证插件。参考官方文档,我创建了我的源文件并将其注册到
CMakeLists.txt
中,如下所示:
MYSQL_ADD_PLUGIN(
auth_token
auth_token.cc
MODULE_ONLY
LINK_LIBRARIES jwt-cpp::jwt-cpp
)
从源代码和我的插件编译 MySQL 后(按照说明),我安装了服务器,然后使用
--plugin-load
命令行选项启动了守护进程:
./bin/mysqld --user=mysql --plugin-load=auth_token.so &
最后我创建了一个用户,如下:
CREATE USER 'token_user'@'%' IDENTIFIED WITH auth_token
现在,当我尝试在 Workbench 中使用
token_user
连接到服务器时,我收到以下响应:
Your connection attempt failed for user 'token_user' to the MySQL server at XXX.XXX.XXX.XXX:3306:
Authentication plugin 'auth_token' cannot be loaded: The specified module could not be found.
我执行了
SHOW PLUGINS
并确认结果集包含我的插件的一行:
姓名 | 状态 | 类型 | 图书馆 | 许可证 |
---|---|---|---|---|
auth_token | 活跃 | 身份验证 | auth_token.so | 专有 |
我还确认了插件文件存在(位于
/usr/local/mysql/lib/plugin/auth_token.so
),并且mysqld的标准输出或syslog中没有报告错误。
如何解决此问题?
client_auth_plugin
属性(来自 st_mysql_auth
结构)误认为是我的服务器端插件的名称,并将其设置为非空值。文档对该属性的定义如下:
客户端必须使用此服务器插件进行身份验证的插件。可以为 NULL 表示“任何插件”。
因为它没有设置为 null,所以它向 MySQL 客户端发出信号,需要一个名为“auth_token”的客户端插件进行身份验证。