服务器端 auth_socket
身份验证插件用于验证通过 Unix 套接字文件从本地主机连接的客户端。该插件使用 SO_PEERCRED
套接字选项来获取有关运行客户端程序的用户的信息。因此,该插件只能在支持 SO_PEERCRED
选项的系统(如 Linux)上使用。
可以检查此插件的源代码,它是一个相对简单的示例,演示了如何编写可加载的身份验证插件。
下表显示了插件和库文件名。该文件必须位于由 plugin_dir
系统变量指定的目录中。
以下部分提供了特定于套接字可插拔身份验证的安装和使用信息
有关 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
。
要验证插件安装,请检查信息架构 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 帐户与套接字插件关联,请参阅 使用套接字可插拔身份验证。
卸载套接字身份验证插件的方法取决于安装它的方法
如果您在服务器启动时使用
--plugin-load-add
选项安装了插件,请在没有该选项的情况下重新启动服务器。如果您在运行时使用
INSTALL PLUGIN
语句安装了插件,它将在服务器重启后保持安装状态。要卸载它,请使用UNINSTALL PLUGIN
UNINSTALL PLUGIN auth_socket;
套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序指定给服务器的 MySQL 用户名匹配。如果名称不匹配,则插件检查套接字用户名是否与 mysql.user
系统表行中的 authentication_string
列中指定的名称匹配。如果找到匹配项,则插件允许连接。可以使用带有 CREATE USER
或 ALTER USER
的 IDENTIFIED ...AS
子句指定 authentication_string
值。
假设为名为 valerie
的操作系统用户创建了一个 MySQL 帐户,该帐户将通过 auth_socket
插件进行身份验证,以从本地主机通过套接字文件进行连接
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
如果本地主机上的用户名为 stefanie
的用户使用 --user=valerie
选项调用 mysql 通过套接字文件连接,服务器将使用 auth_socket
认证客户端。插件确定 --user
选项值 (valerie
) 与客户端用户的名称 (stephanie
) 不同,并拒绝连接。如果名为 valerie
的用户尝试相同操作,插件会发现用户名和 MySQL 用户名都是 valerie
,并允许连接。但是,如果使用不同的协议(如 TCP/IP)建立连接,则即使对于 valerie
,插件也会拒绝连接。
要允许 valerie
和 stephanie
两个操作系统用户通过使用该帐户的套接字文件连接访问 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
和 stephanie
都在连接时指定 --user=valerie
。