10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.5 kb
手册页(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

6.2.17可插拔认证

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

  • 如果服务器无法找到该插件,则会发生错误并拒绝连接尝试。

  • 否则,服务器调用该插件对用户进行身份验证,插件将一个状态返回给服务器,指示用户是否提供了正确的密码并被允许连接。

可插拔身份验证支持以下重要功能:

  • 身份验证方法的选择。可插入身份验证使得dba可以轻松地选择和更改用于单个MySQL帐户的身份验证方法。

  • 外部认证。可插入身份验证使得客户端可以使用适合于身份验证方法的凭据连接到MySQL服务器,这些方法将凭据存储在数据库以外的其他地方mysql.user系统表。例如,可以创建使用外部身份验证方法(如PAM、Windows登录id、LDAP或Kerberos)的插件。

  • 代理用户:如果用户被允许连接,认证插件可以向服务器返回与连接用户不同的用户名,以表明连接用户是另一个用户(代理用户)的代理。在连接持续期间,出于访问控制的目的,代理用户被视为具有被代理用户的特权。实际上,一个用户模仿另一个用户。有关更多信息,请参见第6.2.18节,“代理用户”

请注意

方法启动服务器——skip-grant-tables选项,即使加载了验证插件也不使用,因为服务器不执行客户端验证,并允许任何客户端连接。因为这是不安全的,如果服务器是用——skip-grant-tables选项,它还通过启用来禁用远程连接skip_networking

可用的认证插件

MySQL 8.0提供了以下认证插件:

请注意

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

第三方连接器开发人员应该阅读这一部分,以确定连接器可以在多大程度上利用可插拔身份验证功能,以及采取哪些步骤来变得更加兼容。

如果您对编写自己的身份验证插件感兴趣,请参见编写认证插件

认证插件使用说明

本节提供安装和使用认证插件的一般说明。有关特定插件的说明,请参阅下面描述该插件的部分章节6.4.1,“认证插件”

一般来说,可插认证在服务器端和客户端使用一对对应的插件,因此您可以使用如下所示的认证方法:

  • 如果有必要,安装插件库或包含适当插件的库。在服务器主机上,安装包含服务器端插件的库,以便服务器可以使用它来验证客户端连接。类似地,在每个客户端主机上安装包含客户端插件的库,以供客户端程序使用。无需安装内置的身份验证插件。

  • 对于您创建的每个MySQL帐户,指定用于身份验证的适当服务器端插件。如果帐户使用默认的身份验证插件,帐户创建语句不需要显式地指定插件。的default_authentication_plugin系统变量配置默认的认证插件。

  • 当客户端连接时,服务器端插件告诉客户端程序使用哪个客户端插件进行身份验证。

在帐户使用服务器和客户端程序默认的身份验证方法的情况下,服务器不需要与客户端通信使用哪个客户端插件,并且可以避免客户端/服务器协商中的往返。

对于标准的MySQL客户端,例如mysqlmysqladmin,——default-auth =plugin_nameOption可以在命令行上指定,作为程序期望使用哪个客户端插件的提示,尽管如果与用户帐户关联的服务器端插件需要不同的客户端插件,服务器将覆盖该选项。

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

认证插件客户端/服务器兼容性

可插入身份验证为MySQL帐户选择身份验证方法提供了灵活性,但在某些情况下,由于客户端和服务器之间的身份验证插件不兼容,客户端连接无法建立。

客户端要成功连接到给定服务器上的给定帐户,一般的兼容性原则是客户端和服务器都必须支持身份验证方法账户要求。由于身份验证方法是由身份验证插件实现的,因此客户端和服务器都必须支持身份验证插件账户要求。

身份验证插件不兼容可能以多种方式出现。例子:

  • 使用MySQL 5.7客户端从5.7.22或更低版本连接到MySQL 8.0服务器帐户进行身份验证caching_sha2_password.这是因为5.7客户端无法识别在MySQL 8.0中引入的插件。(此问题已在MySQL 5.7 5.7.23中解决,当caching_sha2_password客户端支持被添加到MySQL客户端库和客户端程序中。

  • 使用MySQL 5.7客户端连接到5.7版本之前的服务器帐户mysql_old_password.这种做法失败有多种原因。首先,这种联系需要——secure-auth = 0,该选项不再受支持。即使它被支持,5.7客户端也不能识别这个插件,因为它在MySQL 5.7中被删除了。

  • 使用MySQL 5.7客户端从社区发行版连接到MySQL 5.7企业服务器帐户,该帐户使用企业专用LDAP身份验证插件之一进行身份验证。这将失败,因为Community客户端无法访问Enterprise插件。

一般来说,当客户端和服务器从同一个MySQL发行版建立连接时,不会出现这些兼容性问题。当在不同MySQL系列的客户机和服务器之间建立连接时,可能会出现问题。这些问题是MySQL在开发过程中引入新的认证插件或删除旧的认证插件时所固有的。为了最大限度地减少潜在的不兼容,应定期及时升级服务器、客户机和连接器。

身份验证插件连接器编写注意事项

MySQL客户端/服务器协议有多种实现。的libmysqlclientC API客户端库是一种实现。一些MySQL连接器(通常不是用C编写的)提供自己的实现。然而,并不是所有的协议实现都以相同的方式处理插件身份验证。本节描述协议实现者应该考虑的身份验证问题。

在客户端/服务器协议中,服务器告诉连接的客户端哪个认证插件是默认的。如果客户端使用的协议实现试图加载默认插件,而该插件在客户端不存在,则加载操作将失败。如果默认插件不是客户端试图连接的帐户实际需要的插件,这是一个不必要的失败。

如果客户端/服务器协议实现没有自己的默认身份验证插件概念,并且总是尝试加载服务器指定的默认插件,如果该插件不可用,则会失败并报错。

为了避免这个问题,客户端使用的协议实现应该有自己的默认插件,并且应该将其作为首选(或者,在无法加载服务器指定的默认插件的情况下,退回到这个默认)。例子:

  • 在MySQL 5.7中,libmysqlclient也可以作为默认选项使用mysql_native_password方法指定的插件MYSQL_DEFAULT_AUTH选择mysql_options ()

  • 当5.7客户端试图连接到8.0服务器时,服务器指定caching_sha2_password作为它的默认身份验证插件,但客户端仍然发送凭证详细信息mysql_native_password或者任何指定的MYSQL_DEFAULT_AUTH

  • 客户端加载服务器指定的插件的唯一时间是change-plugin请求,但在这种情况下,它可以是任何插件,这取决于用户帐户。在这种情况下,客户端必须尝试加载插件,如果该插件不可用,则错误是不可选的。

可插拔认证限制

本节的第一部分描述了关于可插入身份验证框架适用性的一般限制第6.2.17节“可插拔身份验证”.第二部分描述了第三方连接器开发人员如何确定连接器可以在多大程度上利用可插拔身份验证功能,以及采取哪些步骤来提高兼容性。

这个词本地身份验证对象中存储的密码进行身份验证mysql.user系统表。在实现可插入身份验证之前,这与旧的MySQL服务器提供的身份验证方法相同。Windows本地认证指使用已登录Windows的用户的凭据进行身份验证,由Windows Native authentication插件(窗口插件短)。

通用可插式身份验证限制
  • 连接器/ c++:使用此连接器的客户机只能通过使用本机身份验证的帐户连接到服务器。

    例外:如果构建连接器是为了链接到,则支持可插入身份验证libmysqlclient动态地(而不是静态地)加载的当前版本libmysqlclient如果安装了该版本,或者根据当前的链接从源代码重新编译连接器libmysqlclient

    有关编写连接器以处理来自服务器的关于默认服务器端身份验证插件的信息的信息,请参见身份验证插件连接器编写注意事项

  • 连接器/网:使用Connector/NET的客户端可以通过使用本地身份验证或Windows本地身份验证的帐户连接到服务器。

  • 连接器/ PHP:使用此连接器的客户端只能通过使用本地身份验证的帐户连接到服务器,当使用PHP的MySQL本机驱动程序(mysqlnd).

  • Windows本地认证:通过使用Windows插件的帐户连接需要Windows域设置。如果没有它,则使用NTLM身份验证,然后只能进行本地连接;也就是说,客户端和服务器必须运行在同一台计算机上。

  • 代理用户:代理用户支持的范围是,客户端可以通过使用实现代理用户功能的插件(即可以返回与连接用户不同的用户名的插件)验证的帐户进行连接。例如,PAM和Windows插件支持代理用户。的mysql_native_passwordsha256_password默认情况下,身份验证插件不支持代理用户,但可以配置为这样做;看到服务器对代理用户映射的支持

  • 复制:副本不仅可以使用本地身份验证使用复制用户帐户,而且如果所需的客户端插件可用,还可以通过使用非本地身份验证的复制用户帐户连接。如果插件是内置的libmysqlclient,默认可用。否则,插件必须安装在副本端的目录下plugin_dir系统变量。

  • 联邦表:一个联邦表只能通过远程服务器上使用本机身份验证的帐户访问远程表。

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

第三方连接器开发人员可以使用以下指南来确定连接器是否准备就绪,以利用可插拔身份验证功能,以及采取哪些步骤来变得更加兼容:

  • 未对其进行任何更改的现有连接器使用本机身份验证,而使用该连接器的客户机只能通过使用本机身份验证的帐户连接到服务器。但是,您应该针对服务器的最新版本测试连接器,以验证此类连接仍然正常工作。

    例外:连接器可能使用可插入身份验证而不需要任何更改,如果它链接到libmysqlclient动态地(而不是静态地)加载的当前版本libmysqlclient如果安装了该版本。

  • 为了利用可插入的身份验证功能,连接器是libmysqlclient的当前版本应该被重新链接libmysqlclient.这使得连接器支持连接,尽管现在需要内置客户端插件的帐户libmysqlclient(例如PAM身份验证所需的cleartext插件和Windows本机身份验证所需的Windows插件)。电流连接libmysqlclient还允许连接器访问安装在默认MySQL插件目录中的客户端插件(通常是由本地服务器的默认值命名的目录)plugin_dir系统变量)。

    如果连接器连接到libmysqlclient动态地,必须确保更新的版本libmysqlclient安装在客户端主机上,并且连接器在运行时加载它。

  • 连接器支持给定身份验证方法的另一种方法是直接在客户机/服务器协议中实现它。Connector/NET使用这种方法提供对Windows本机身份验证的支持。

  • 如果连接器应该能够从不同于默认插件目录的目录中加载客户端插件,那么它必须为客户端用户实现一些指定目录的方法。可能的方法包括命令行选项或环境变量,连接器可以从中获取目录名。标准MySQL客户端程序,如mysqlmysqladmin实现一个——plugin-dir选择。另请参阅C API客户端插件接口

  • 如本节前面所述,连接器对代理用户的支持取决于它支持的身份验证方法是否允许代理用户。