• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 测试可插入身份验证

    MySQL包含一个测试插件,该插件检查帐户凭据并将成功或失败记录到服务器错误日志中。这是一个可加载的插件(未内置),必须在使用前安装。

    与内置的本机插件不同,测试插件的源代码与服务器源代码是分开的,因此可以将其作为一个相对简单的示例进行检查,以演示如何编写可加载的身份验证插件。

    注意

    该插件用于测试和开发目的,不能用于生产环境或暴露于公共网络的服务器上。

    下表显示了插件和库文件名。文件名后缀在您的系统上可能有所不同。该文件必须位于plugin_dir系统变量命名的目录中。

    表6.22用于测试身份验证的插件和库名称

    插件或文件插件或文件名
    服务器端插件test_plugin_server
    客户端插件 uth_test_plugin
    库文件 uth_test_plugin.so

    以下各节提供特定于测试可插拔身份验证的安装和使用信息:

    • 安装测试可插入身份验证
    • 卸载测试可插入身份验证
    • 使用测试可插入身份验证

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

    安装测试可插入身份验证

    本节介绍如何安装测试身份验证插件。有关安装插件的一般信息,请参见“MySQL服务器插件”。

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

    要在服务器启动时加载插件,请使用--plugin-load-add选项来命名包含该插件的库文件。使用这种插件加载方法,每次服务器启动时都必须给出该选项。例如,将以下行放在服务器my.cnf文件中(.so根据需要调整平台的后缀):

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

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

    或者,要在运行时加载插件,请使用以下语句(.so根据需要调整平台的后缀):

    INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.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 '%test_plugin%';
    +--------------------	+---------------	+
    | PLUGIN_NAME         | PLUGIN_STATUS  |
    +--------------------	+---------------	+
    | test_plugin_server  | ACTIVE         |
    +--------------------	+---------------	+
    

    如果插件未能初始化,请检查服务器错误日志以获取诊断消息。

    要将MySQL帐户与测试插件相关联,请参见使用测试可插入身份验证。

    卸载测试可插入身份验证

    卸载测试身份验证插件的方法取决于安装方式:

    • 如果使用--plugin-load-add选项在服务器启动时安装了插件,请在不使用选项的情况下重新启动服务器。
    • 如果您在运行时使用一条INSTALL PLUGIN语句安装了该插件,则在服务器重新启动后,该插件将保持安装状态。要卸载它,请使用UNINSTALL PLUGIN

      UNINSTALL PLUGIN test_plugin_server;
      
    使用测试可插入身份验证

    要使用测试身份验证插件,请在IDENTIFIED WITH子句中创建一个帐户并命名该插件:

    CREATE USER 'testuser'@'localhost'
    IDENTIFIED WITH test_plugin_server
    BY 'testpassword';
    

    然后,在连接到服务器时为该帐户提供--user--password选项。例如:

    shell>mysql --user=testuser --password
    Enter password: testpassword
    

    该插件获取从客户端接收到的密码,并将其与系统表中 uthentication_string帐户行列中存储的值进行比较mysql.user。如果两个值匹配,那么插件将返回该 uthentication_string值作为新的有效用户ID。

    您可以在服务器错误日志中查找指示认证是否成功的消息(请注意,密码被报告为“ user ”):

    [Note] Plugin test_plugin_server reported:
    'successfully authenticated user testpassword'