#### 6.4.1.10 Socket Peer-Credential 可插拔身份验证

[](<>)[](<>)

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

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

下表显示了插件和库文件名。该文件必须位于由[`插件目录`](server-system-variables.html#sysvar_plugin_dir)系统变量。

[](<>)

**表 6.25 用于套接字对等凭据身份验证的插件和库名称**

| 插件或文件 | 插件或文件名 |
| ----- | ------ |
| 服务器端插件 | `auth_socket` |
| 客户端插件 | 无，见讨论 |
| 库文件 | `auth_socket.so` |

以下部分提供特定于套接字可插拔身份验证的安装和使用信息：

-   [安装 Socket 可插拔身份验证](socket-pluggable-authentication.html#socket-pluggable-authentication-installation)

-   [卸载 Socket 可插拔身份验证](socket-pluggable-authentication.html#socket-pluggable-authentication-uninstallation)

-   [使用 Socket 可插拔身份验证](socket-pluggable-authentication.html#socket-pluggable-authentication-usage)

    有关 MySQL 中可插入身份验证的一般信息，请参阅[第 6.2.17 节，“可插拔身份验证”](pluggable-authentication.html).

##### 安装 Socket 可插拔身份验证

本节介绍如何安装套接字认证插件。有关安装插件的一般信息，请参阅[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).

要被服务器使用，插件库文件必须位于 MySQL 插件目录（由[`插件目录`](server-system-variables.html#sysvar_plugin_dir)系统变量）。如有必要，通过设置值来配置插件目录位置[`插件目录`](server-system-variables.html#sysvar_plugin_dir)在服务器启动时。

要在服务器启动时加载插件，请使用[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add)选项来命名包含它的库文件。使用这种插件加载方法，每次服务器启动时都必须给出该选项。例如，将这些行放在服务器中`我的.cnf`文件：

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

修改后`我的.cnf`, 重启服务器使新设置生效。

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

```
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
```

[`安装插件`](install-plugin.html)立即加载插件，并将其注册到`mysql.plugins`系统表，以使服务器在每次后续正常启动时加载它，而无需[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add).

要验证插件安装，请检查[`INFORMATION_SCHEMA.PLUGINS`](information-schema-plugins-table.html)表或使用[`显示插件`](show-plugins.html)声明（见[第 5.6.2 节，“获取服务器插件信息”](obtaining-plugin-information.html)）。例如：

```
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-pluggable-authentication.html#socket-pluggable-authentication-usage).

##### 卸载 Socket 可插拔身份验证

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

-   如果您在服务器启动时使用[`--plugin-load-add`](server-options.html#option_mysqld_plugin-load-add)选项，在没有选项的情况下重新启动服务器。

-   如果您在运行时使用[`安装插件`](install-plugin.html)声明，它仍然在服务器重新启动时安装。要卸载它，请使用[`卸载插件`](uninstall-plugin.html)：

    ```
    UNINSTALL PLUGIN auth_socket;
    ```

##### 使用 Socket 可插拔身份验证

socket插件检查socket用户名（操作系统用户名）是否与客户端程序指定给服务器的MySQL用户名匹配。如果名称不匹配，插件会检查套接字用户名是否与指定的名称匹配`身份验证字符串`的列`mysql.user`系统表行。如果找到匹配项，则插件允许连接。这`身份验证字符串`可以使用指定的值`已识别...作为`子句[`创建用户`](create-user.html)要么[`更改用户`](alter-user.html).

假设为名为的操作系统用户创建了一个 MySQL 帐户`瓦莱丽`谁将由`auth_socket`通过套接字文件从本地主机连接的插件：

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

如果本地主机上的用户登录名为`斯蒂芬妮`调用[**mysql**](mysql.html)有选项`--用户=瓦莱丽`通过套接字文件连接，服务器使用`auth_socket`对客户端进行身份验证。该插件确定`- 用户`期权价值（`瓦莱丽`) 不同于客户端用户的名称 (`斯蒂芬妮`) 并拒绝连接。如果用户名为`瓦莱丽`尝试同样的事情，插件发现用户名和mysql用户名都是`瓦莱丽`并允许连接。但是，插件拒绝连接，即使`瓦莱丽`如果连接是使用不同的协议（例如 TCP/IP）建立的。

允许两者`瓦莱丽`和`斯蒂芬妮`操作系统用户通过使用该帐户的套接字文件连接访问MySQL，这可以做两种方式：

-   在创建帐户时命名两个用户，一个跟随[`创建用户`](create-user.html)，另一个在身份验证字符串中：

    ```
    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
    ```

-   如果你已经使用过[`创建用户`](create-user.html)要为单个用户创建帐户，请使用[`更改用户`](alter-user.html)要添加第二个用户：

    ```
    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
    ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
    ```

    访问帐户，都是`瓦莱丽`和`斯蒂芬妮`指定`--用户=瓦莱丽`在连接时。
