文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  Socket 对等凭证可插拔身份验证

8.4.1.10 Socket 对等凭证可插拔身份验证

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

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

下表显示了插件和库文件名。该文件必须位于 plugin_dir 系统变量命名的目录中。

表 8.26 Socket 对等凭证身份验证的插件和库名称

插件或文件 插件或文件名
服务器端插件 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 后,重新启动服务器以使新设置生效。

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

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 帐户与 Socket 插件关联,请参阅 使用 Socket 可插拔身份验证

卸载 Socket 可插拔身份验证

卸载 Socket 身份验证插件的方法取决于您安装它的方式

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

  • 如果您在运行时使用 INSTALL PLUGIN 语句安装了插件,则该插件在服务器重启后仍会保留安装状态。要卸载它,请使用 UNINSTALL PLUGIN

    UNINSTALL PLUGIN auth_socket;
使用 Socket 可插拔身份验证

Socket 插件会检查 Socket 用户名(操作系统用户名)是否与客户端程序指定给服务器的 MySQL 用户名匹配。如果名称不匹配,则插件会检查 Socket 用户名是否与 mysql.user 系统表行的 authentication_string 列中指定的名称匹配。如果找到匹配项,则插件允许连接。可以使用 IDENTIFIED ...AS 子句和 CREATE USERALTER USER 指定 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,插件也会拒绝连接。

要允许 valeriestephanie 操作系统用户都通过使用该帐户的套接字文件连接访问 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';

要访问该帐户,valeriestephanie 都需要在连接时指定 --user=valerie