6.2.13 可插拔身份验证

当 Client 端连接到 MySQL 服务器时,服务器使用 Client 端提供的用户名和 Client 端主机从mysql.user系统 table 中选择适当的帐户行。然后,服务器对 Client 端进行身份验证,从帐户行中确定哪个身份验证插件适用于 Client 端:

可插拔身份验证启用以下重要功能:

Note

如果使用--skip-grant-tables选项启动服务器,则即使加载了身份验证插件也不会使用,因为服务器不执行 Client 端身份验证并允许任何 Client 端连接。因为这是不安全的,所以您可能需要结合使用--skip-grant-tables和启用skip_networking系统变量来防止远程 Client 端连接。

可用的身份验证插件

MySQL 5.7 提供了以下身份验证插件:

Note

有关当前对使用可插入身份验证的限制(包括哪些连接器支持哪些插件)的信息,请参阅可插拔身份验证的限制

第三方连接器开发人员应阅读该部分,以确定连接器可以在何种程度上利用可插拔身份验证功能,以及应采取哪些步骤使其更加合规。

如果您有兴趣编写自己的身份验证插件,请参阅第 28.2.4.9 节“编写身份验证插件”

身份验证插件的使用

本节提供有关安装和使用身份验证插件的一般说明。有关特定插件的说明,请参见第 6.4.1 节“身份验证插件”下描述该插件的部分。

通常,可插入身份验证在服务器端和 Client 端使用一对相应的插件,因此您使用如下给定的身份验证方法:

如果帐户使用服务器和 Client 端程序默认的身份验证方法,则服务器无需与 Client 端进行通信,以使用哪个 Client 端插件,Client 端/服务器协商中的往返行程可以是避免。对于使用本机 MySQL 身份验证的帐户而言,这是正确的。

对于标准的 MySQLClient 端(例如mysqlmysqladmin),可以在命令行上指定--default-auth=plugin_name选项,以提示程序可以使用哪个 Client 端插件,尽管如果服务器端插件与之关联,服务器将覆盖此选项。该用户帐户需要使用其他 Client 端插件。

如果 Client 端程序找不到 Client 端插件库文件,请指定--plugin-dir=dir_name选项以指示插件库目录位置。

可插入身份验证的限制

本节的第一部分描述了对在第 6.2.13 节“可插入身份验证”处描述的可插入身份验证框架的适用性的一般限制。第二部分介绍了第三方连接器开发人员如何确定连接器可以利用可插拔身份验证功能的程度,以及采取哪些步骤使其更加合规。

此处使用的术语“本地认证”是指针对mysql.user系统 table 中存储的密码进行认证。在实现可插入身份验证之前,这与旧版 MySQL 服务器提供的身份验证方法相同。 “ Windows 本机身份验证”是指使用已经登录 Windows 的用户的凭据进行的身份验证,这由 Windows 本机身份验证插件(简称“ Windows 插件”)实现。

一般可插拔身份验证限制

exception:如果连接器被构建为可动态(而非静态)链接到libmysqlclient,并且已安装libmysqlclient的当前版本(如果已安装该版本),或者如果将连接器从源重新编译为针对当前libmysqlclient进行链接,则它支持可插入身份验证。

可插拔身份验证和第三方连接器

第三方连接器开发人员可以使用以下准则来确定连接器的就绪状态,以利用可插入的身份验证功能以及应采取哪些步骤使其更加合规:

exception:如果连接器动态(而不是静态)链接到libmysqlclient,并且如果安装了该版本,则它将加载libmysqlclient的当前版本,而该连接器可以与可插入身份验证一起使用,而无需进行任何更改。

如果连接器动态链接到libmysqlclient,则必须确保在 Client 端主机上安装了libmysqlclient的较新版本,并确保连接器在运行时加载它。

首页