服务器端 auth_socket
身份验证插件验证从本地主机通过 Unix 套接字文件连接的客户端。该插件使用 SO_PEERCRED
套接字选项来获取客户端程序的用户信息。因此,该插件只能在支持 SO_PEERCRED
选项的系统上使用,例如 Linux。
可以查看该插件的源代码作为编写可加载身份验证插件的相对简单的示例。
以下表格显示了插件和库文件名。该文件必须位于由 plugin_dir
系统变量命名的目录中。
表 8.27 套接字对等凭证身份验证插件和库文件名
Plugin or File | Plugin or File Name |
---|---|
服务器端插件 | auth_socket |
客户端插件 | 无,见讨论 |
库文件 | auth_socket.so |
以下部分提供了套接字可插拔身份验证的安装和使用信息:
有关 MySQL 中可插拔身份验证的常规信息,请参阅 第 8.2.17 节,“可插拔身份验证”。
本节描述了如何安装套接字身份验证插件。有关安装插件的常规信息,请参阅 第 7.6.1 节,“安装和卸载插件”。
要使插件可供服务器使用,插件库文件必须位于 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
语句(见 第 7.6.2 节,“获取服务器插件信息”)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%socket%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| auth_socket | ACTIVE |
+-------------+---------------+
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
要将 MySQL 帐户与套接字插件关联,请参阅 使用套接字可插拔身份验证。
卸载 socket 身份验证插件的方法取决于您安装它的方式:
-
如果您在服务器启动时使用
--plugin-load-add
选项安装了插件,只需重新启动服务器而不使用该选项。 -
如果您在运行时使用
INSTALL PLUGIN
语句安装了插件,它将在服务器重新启动时保持安装状态。要卸载它,请使用UNINSTALL PLUGIN
:UNINSTALL PLUGIN auth_socket;
Socket 插件检查 socket 用户名(操作系统用户名)是否与客户端程序指定的 MySQL 用户名匹配。如果名称不匹配,插件检查 socket 用户名是否与 mysql.user
系统表中的 authentication_string
列中的名称匹配。如果找到匹配项,插件允许连接。authentication_string
值可以使用 CREATE USER
或 ALTER USER
中的 IDENTIFIED ...AS
子句指定。
假设为操作系统用户 valerie
创建了一个 MySQL 帐户,该帐户将使用 auth_socket
插件对本地主机上的连接进行身份验证:
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
如果本地主机上的用户 stefanie
使用 mysql 选项 --user=valerie
通过套接字文件连接,服务器将使用 auth_socket
插件对客户端进行身份验证。插件确定 --user
选项值 (valerie
) 与客户端用户名 (stefanie
) 不同,并拒绝连接。如果用户 valerie
尝试相同的操作,插件发现用户名和 MySQL 用户名都是 valerie
,因此允许连接。然而,即使是 valerie
,如果连接使用不同的协议,例如 TCP/IP,插件也将拒绝连接。
要允许 valerie
和 stefanie
操作系统用户通过套接字文件连接访问 MySQL,可以通过两种方式实现:
-
在创建帐户时,使用
CREATE USER
指定两个用户名,一个在帐户创建时,另一个在身份验证字符串中:CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
-
如果您已经使用
CREATE USER
创建了单个用户的帐户,可以使用ALTER USER
添加第二个用户:CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket; ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
要访问帐户,valerie
和 stefanie
都需要在连接时指定 --user=valerie
。