Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Socket Peer-Credential Pluggable Authentication

8.4.1.10 Socket Peer-Credential 插件式认证

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

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

以下表格显示了插件和库文件名。文件必须位于名为plugin_dir系统变量指定的目录中。

表8.26:Socket Peer-Credential 认证插件和库文件名

Plugin or File Plugin or File Name
服务器端插件 auth_socket
客户端插件 无,详见讨论
库文件 auth_socket.so

以下部分提供了 socket 插件式认证的安装和使用信息:

关于 MySQL 中的插件式认证的总体信息,请参阅第8.2.17节,“插件式认证”

安装 Socket 插件式认证

本节描述了如何安装 Socket 认证插件。关于安装插件的总体信息,请参阅第7.6.1节,“安装和卸载插件”

要使插件在服务器上可用,插件库文件必须位于 MySQL 插件目录(由plugin_dir系统变量指定的目录中)。如果必要,可以通过设置plugin_dir的值来配置插件目录位置。

要在服务器启动时加载插件,请使用--plugin-load-add选项指定包含插件的库文件。使用这个插件加载方法,必须在每次启动服务器时提供该选项。例如,在服务器my.cnf文件中添加以下行:

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

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

Alternatively, to load the plugin at runtime, use this statement:

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 列。如果找到匹配项,插件允许连接。 authentication_string 值可以使用 IDENTIFIED ...AS take CREATE USERALTER USER

假设 MySQL 账户为操作系统用户 valerie,该用户将通过套接字文件连接到本地主机,并使用 auth_socket 插件进行认证:

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

当本地主机上的用户,用户名为stefanie,使用mysql命令,使用--user=valerie选项通过套接字文件连接时,服务器使用auth_socket来验证客户端。插件确定--user选项值(valerie)与客户端用户名(stephanie)不同,并拒绝连接。如果名为valerie的用户尝试相同的操作,插件发现用户名和MySQL用户名都是valerie,允许连接。但是,插件即使是使用valerie的用户,也拒绝连接,除非使用不同的协议,如TCP/IP。

要允许valeriestephanie操作系统用户通过套接字文件连接使用该账户,可以采取以下两种方法:

  • 在账户创建时,使用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';

要访问账户,valeriestephanie都指定--user=valerie连接时。