MySQL8认证插件—Socket Peer-Credential Pluggable Authentication

服务器端auth_socket身份验证插件通过Unix套接字文件对从本地主机连接的客户端进行身份验证。该插件使用 SO_PEERCRED 套接字选项来获取有关运行客户端程序的用户的信息。因此,该插件只能在支持 SO_PEERCRED 选项的系统上使用,例如Linux。

该插件的源代码可以作为一个相对简单的示例进行检查,演示如何编写可加载的身份验证插件。

插件和库名称

插件或文件

插件或文件名称

Server-side plugin

auth_socket

Client-side plugin

None, see discussion

Library file

auth_socket.so

安装套接字可插入身份验证

要供服务器使用,插件库文件必须位于MySQL插件目录(由 plugin_dir 系统变量命名的目录)中。如有必要,通过在服务器启动时设置 plugin_dir 的值来配置插件目录位置。

要在服务器启动时加载插件,请使用 --plugin-load-add 选项命名包含该插件的库文件。使用此插件加载方法,每次服务器启动时都必须给定该选项。例如,将这些行放在服务器my.cnf文件中:

[mysqld]
plugin-load-add=auth_socket.so

修改my.cnf后,重新启动服务器以使新设置生效。

或者,要在运行时加载插件,请使用以下语句:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

INSTALL PLUGIN 立即加载插件,并将其注册在 mysql.plugins 系统表中,以使服务器在每次后续正常启动时加载它,而不需要 --plugin-load-add

要验证插件安装,请检查Information Schema PLUGINS表或使用SHOW PLUGINS语句。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%socket%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| auth_socket | ACTIVE |
+-------------+---------------+

如果插件无法初始化,请查看服务器错误日志中的诊断消息。

卸载套接字可插入身份验证

用于卸载套接字身份验证插件的方法取决于您的安装方式:

如果您在服务器启动时使用 --plugin-load-add 选项安装了插件,请在不使用该选项的情况下重新启动服务器。

如果您在运行时使用 INSTALL PLUGIN 语句安装插件,那么它将在服务器重新启动时保持安装状态。要卸载它,请使用 INSTALL PLUGIN

UNINSTALL PLUGIN auth_socket;

使用套接字可插拔身份验证

套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序指定给服务器的MySQL用户名匹配。如果名称不匹配,插件会检查套接字用户名是否与 mysql.user 系统表行的 authentication_string 列中指定的名称匹配。如果找到匹配项,插件将允许连接。authentication_string 值可以使用CREATE USER或ALTER USER的 IDENTIFIED ... AS 子句指定。

假设为一个名为 socker_user1 的操作系统用户创建了一个MySQL账户,该用户将通过 auth_socket 插件进行身份验证,以便通过套接字文件从本地主机进行连接:

CREATE USER 'socker_user1'@'localhost' IDENTIFIED WITH auth_socket;

如果本地主机上登录名为 socker_user2 的用户使用选项 --user=socker_user1 调用mysql通过套接字文件进行连接,则服务器将使用 auth_socket 对客户端进行身份验证。插件确定 --user 选项值(socker_user1)与客户端用户名(socker_user2)不同,并拒绝连接。如果一个名为 socker_user1 的用户尝试了同样的事情,插件会发现用户名和MySQL用户名都是 socker_user1,并允许连接。然而,如果使用不同的协议(如TCP/IP)进行连接,即使对于 socker_user1,插件也会拒绝连接。

为了允许 socker_user1 和 socker_user2 操作系统用户通过使用该账户的套接字文件连接访问MySQL,可以通过两种方式实现:

● 在创建账户时为两个用户命名,一个在CREATE USER之后,另一个在身份验证字符串中:

CREATE USER 'socker_user1'@'localhost' IDENTIFIED WITH auth_socket AS 'socker_user2';

● 如果您已经使用CREATE USER为单个用户创建账户,请使用 ALTER USER 添加第二个用户:

CREATE USER 'socker_user1'@'localhost' IDENTIFIED WITH auth_socket;
ALTER USER 'socker_user1'@'localhost' IDENTIFIED WITH auth_socket AS 'socker_user2';

要访问该账户,socker_user1 和 socker_user2 在连接时都指定 --user=socker_user1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值