• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 套接字对等证书可插入身份验证

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

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

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

    表6.21套接字对等身份验证的插件和库名称

    插件或文件插件或文件名
    服务器端插件 uth_socket
    客户端插件无,请参见讨论
    库文件 uth_socket.so

    以下各节提供特定于套接字可插入身份验证的安装和使用信息:

    • 安装套接字可插入身份验证
    • 卸载套接字可插入身份验证
    • 使用套接字可插入身份验证

    有关MySQL中的可插入身份验证的一般信息,

    安装套接字可插入身份验证

    本节介绍如何安装套接字认证插件。有关安装插件的一般信息,请参见“MySQL服务器插件”。

    要由服务器使用,插件库文件必须位于MySQL插件目录(由plugin_dir系统变量命名的目录)中。如有必要,通过设置plugin_dir服务器启动时的值来配置插件目录位置。

    要在服务器启动时加载插件,请使用--plugin-load-add选项来命名包含该插件的库文件。使用这种插件加载方法,每次服务器启动时都必须给出该选项。例如,将这些行放在服务器my.cnf文件中:

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

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

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

    INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
    

    INSTALL PLUGIN立即加载该插件,并将其注册到mysql.plugins系统表中,以使服务器为每次后续的正常启动加载该插件,而无需--plugin-load-add

    要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS表或使用以下SHOW PLUGINS语句(请参见“获取服务器插件信息”)。例如:

    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用户名匹配。如果名称不匹配,则插件将检查套接字用户名是否 uthentication_stringmysql.user系统表行的列中指定的名称匹配。如果找到匹配项,则插件允许连接。 uthentication_string可以使用IDENTIFIED ...AS带有CREATE USER或的子句指定该值ALTER USER

    假设为名为valeriewho 的操作系统用户创建了一个MySQL帐户,该用户将由 uth_socket插件进行身份验证,以通过套接字文件从本地主机进行连接:

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

    如果本地主机上具有登录名的用户通过选项通过套接字文件进行连接来stefanie调用mysql--user=valerie,则服务器将使用 uth_socket该客户端进行身份验证。插件确定--user选项值(valerie)与客户端用户的名称(stephanie)不同,并拒绝连接。如果名为的用户valerie尝试执行相同的操作,则插件会发现该用户名和MySQL用户名都相同,valerie并允许连接。但是,即使valerie连接是使用其他协议(例如TCP / IP)建立的,插件也会拒绝连接。

    要允许操作系统用户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在连接时。