4.4.9编写身份验证插件

MySQL支持可插拔的身份验证,其中调用插件以进行身份​​验证客户端连接。身份验证插件使使用除了存储在中的密码的内置方法之外的身份验证方法mysql.user系统表。例如,可以写入插件以访问外部认证方法。此外,认证插件可以支持代理用户能力,使得连接用户是另一个用户的代理,并且被处理,以便访问控制,因为具有不同用户的权限。有关更多信息,请参阅可插拔身份验证, 和代理用户

可以为服务器端或客户端编写身份验证插件。服务器端插件使用相同的插件API,用于其他服务器插件类型,例如全文解析器或审核插件(尽管使用不同的类型特定的描述符)。客户端插件使用客户端插件API。

若干头文件包含与身份验证插件相关的信息:

  • 插件:定义mysql_authentication_plugin.服务器插件类型。

  • client_plugin.h.:定义客户端插件的API。这包括用于客户端插件C API调用的客户端插件描述符和功能原型(参见C API客户端插件界面)。

  • plugin_auth.h:定义特定于身份验证插件的服务器插件API的一部分。这包括用于服务器端认证插件的特定类型描述符和MYSQL_SERVER_AUTH_INFO结构体。

  • plugin_auth_common.h.:包含客户端和服务器身份验证插件的常见元素。这包括返回值定义和mysql_plugin_vio.结构体。

要编写一个身份验证插件,请在插件源文件中包含以下头文件。根据插件的功能和需求,可能还需要其他MySQL头文件或一般头文件。

  • 对于实现服务器身份验证插件的源文件,包括此文件:

    #include 
  • 对于实现客户端身份验证插件的源文件,或客户端和服务器插件,包括这些文件:

    #include  #include  #include 

plugin_auth.h包括插件plugin_auth_common.h.,因此不需要显式包含后一个文件。

本节描述如何编写一对简单的服务器和客户端身份验证插件。

警告

这些插件接受任何非空密码,密码作为ClearText发送。这是不安全的,所以插件不应在生产环境中使用。

这里开发的服务器端和客户端插件都被命名auth_simple.。中描述的第4.4.2节“插件数据结构”,插件库文件必须具有与客户端插件相同的基本名称,因此源文件名是auth_simple.c.并生成一个名为的图书馆auth_simple.so.(假设您的系统使用。所以作为库文件的后缀)。

在MySQL源分发中,身份验证插件源位于插件/身份验证目录,可以检查为编写其他身份验证插件的指南。此外,要查看如何实现内置的身份验证插件,请参阅SQL / SQL_ACL.CC.对于MySQL服务器内置的插件和SQL-Common / Client.c中内置的插件libmysqlclient客户图书馆。(对于内置的客户端插件,请注意auth_plugin_t.使用的结构与通常的客户端插件声明宏的结构不同。特别地,前两个成员是明确提供的,而不是通过声明宏提供。)