4.4 连接器/NET 认证

MySQL Connector/NET 实现了多种身份验证插件,MySQL 服务器可以调用这些插件来对用户进行身份验证。可插入身份验证使服务器能够根据您的应用程序在建立连接时传递给服务器的用户名和主机名来确定应用哪个插件。有关身份验证过程的完整描述,请参阅 可插入身份验证

Connector/NET 提供了以下身份验证插件和方法:

authentication_fido_client

有关一般信息,请参阅 FIDO 可插入身份验证

MySQL Enterprise Edition 支持使用智能卡、安全密钥和生物识别读取器等设备对 MySQL Server 8.0.27(及更高版本)进行身份验证。这种身份验证方法基于 Fast Identity Online (FIDO) 标准,并authentication_fido在服务器端和authentication_fido_client客户端使用一对插件。从 8.0.29 版本开始,Connector/NET 支持客户端 FIDO 身份验证插件。

FIDO认证方式可以直接用于单因素认证(1FA),也可以结合现有的MySQL认证方式支持使用2FA或3FA的账户。Connector/NET 提供了一种回调机制来通知应用程序用户将与验证器进行交互。例如:

public void OpenConnection()
{
    using(var connection = new MySQLConnection("host=hostname; .. "))
      connection.FidoActionRequested += FidoActionRequested;
      connection.Open();
      // ...
}

public void FidoActionRequested() 
{
    Console.WriteLine("Please insert FIDO device and perform gesture action for authentication to complete.");
}

如果满足以下要求,Connector/NET 会通知应用程序它期望用户与身份验证器进行交互:

  • 必须为与每个用户帐户相关联的特定身份验证因素注册 FIDO 身份验证器。

  • 应用程序、连接器/NET 和身份验证器必须在同一主机上或在受信任的网络中可用。

  • 在 Windows 上,应用程序必须以管理员身份运行才能访问所需的 FIDO 库,该库必须存在于客户端上。

在没有用户与设备交互的合理时间间隔过去后,身份验证过程终止。

authentication_kerberos_client

有关一般信息,请参阅 Kerberos 可插入身份验证

应用程序和 MySQL 服务器可以使用 Kerberos 身份验证协议来验证 MySQL 企业版用户帐户和服务。使用该 authentication_kerberos_client插件,用户和服务器都能够验证彼此的身份。永远不会通过网络发送任何密码,并且 Kerberos 协议消息受到保护以防止窃听和重放攻击。服务器端插件仅在 Linux 上受支持。

笔记

Defaultauthenticationplugin connection-string 选项对于支持无用户和无密码的 Kerberos 身份验证是必需的(请参阅 仅限经典 MySQL 协议的选项)。

启用 Kerberos 身份验证的可用性和要求因主机类型而异。Connector/NET 不为在 macOS 上运行的 .NET 应用程序提供 Kerberos 身份验证。在 Linux 和 Windows 上运行的应用程序基于以下接口参与 Kerberos 身份验证:

  • 适用于 Linux 的通用安全服务应用程序接口 (GSSAPI)

    最低版本:用于经典 MySQL 协议连接的 Connector/NET 8.0.26。仅在 Linux 上受支持。

    MIT Kerberos 必须安装在每个客户端系统上,以启用 MySQL 服务器对 Connector/NET 请求票证的身份验证。libgssapi_krb5.so.2 需要用于 Linux的库。有关连接过程的概述,请参阅 Linux 客户端的连接命令

  • 适用于 Windows 的安全支持提供程序接口 (SSPI)

    最低版本:用于经典 MySQL 协议连接的 Connector/NET 8.0.27。仅在 Windows 上受支持。

    连接器/NET 使用 SSPI/Kerberos 进行身份验证。在 Windows 上,SSPI 实现 GSSAPI。SSPI 和 GSSAPI 之间的行为差​​异包括:

    • 配置。  Windows 客户端不使用任何外部库或 Kerberos 配置。例如,在 Linux 上,您可以设置票证授予票证 (TGT) 到期时间、密钥分发中心 (KDC) 端口等。在 Windows 上,您无法设置任何这些选项。

    • TGT 票证缓存。  如果您提供用户名和密码进行身份验证,则获取的票证不会存储在缓存中。每次都会获得新的门票。

    • 无用户和无密码身份验证。  使用 Windows 登录用户名和凭据。Windows 客户端必须是服务器的 Active Directory 域的一部分才能成功登录。

    有关连接过程的概述,请参阅 Windows 客户端的连接命令

authentication_ldap_sasl_client

有关一般信息,请参阅 LDAP 可插入身份验证

基于 SASL 的 LDAP 身份验证需要 MySQL 企业版,并且只能用于建立经典的 MySQL 协议连接。该认证协议适用于运行在 Linux、Windows(部分支持)上的应用程序,但不适用于 macOS。

最低版本:

  • SCRAM-SHA-1Linux 和 Windows 上的 连接器/NET 8.0.22 ( )。

  • SCRAM-SHA-256Linux 和 Windows 上的 连接器/NET 8.0.23 ( )。

  • 仅限 Linux 上的连接器/NET 8.0.24 ( GSSAPI)。

    MIT Kerberos 必须安装在每个客户端系统上,以启用 MySQL 服务器对 Connector/NET 请求票证的身份验证。authentication_ldap_sasl插件必须配置为使用该机制 GSSAPI,并且应用程序用户必须按如下方式标识:

    IDENTIFIED WITH 'authentication_ldap_sasl'

    libgssapi_krb5.so.2需要用于 Linux 的库。

authentication_oci_client

最低版本:Connector/NET 8.0.27,仅适用于经典 MySQL 协议连接。

Connector/NET 支持 Oracle Cloud Infrastructure 可插拔身份验证,它使 .NET 应用程序能够以安全的方式访问 MySQL 数据库服务,而无需使用密码。.NET Framework 4.5 不支持这种可插入身份验证。x实施。

此类连接的先决条件包括访问租户、计算实例、连接到专用网络的 MySQL 数据库系统以及正确配置的组、隔离区和策略。Oracle Cloud Infrastructure 管理员可以为 MySQL 用户帐户提供基本设置。

此外,MySQL 数据库系统必须安装并加载服务器端身份验证插件,然后才能尝试连接。Connector/NET 实现客户端身份验证插件。

在身份验证期间,客户端插件找到用户的 Oracle Cloud Infrastructure 配置文件,并从中获取签名密钥文件。配置文件的位置可以用 ociConfigFile 连接选项指定;否则,使用默认位置。Connector/NET 然后对它从服务器接收到的令牌进行签名,使用该令牌创建返回给服务器的 SHA256 RSA 签名,并等待身份验证过程的成功或失败。

潜在的错误条件包括:

  • Private key could not be found at location given by OCI configuration entry 'key_file'.

    Connector/NET 在指定位置找不到私钥。

  • OCI configuration entry 'key_file' does not reference a valid key file.

    连接器/NET 无法加载或使用指定的私钥。

  • OCI configuration file does not contain a 'fingerprint' or 'key_file' entry.

    配置文件缺少 fingerprint条目、 key_file条目或两者。

  • OCI configuration file could not be read

    Connector/NET 无法找到或加载配置文件。确保该ociConfigFile值与文件的位置匹配。

  • The OCI SDK cannot be found or is not installed

    Connector/NET 无法在运行时加载 Oracle Cloud Infrastructure SDK 库。

连接器/NET 引用 OCI.DotNetSDK.Common Oracle Cloud Infrastructure SDK 库中的 NuGet 包来读取配置文件条目值,并且此包必须可用。

小费

要管理 .NET 项目的大小,请仅包含身份验证所需的包,而不是库中的全套包。

有关使用和支持的具体详细信息,请参阅 SDK 和 CLI 配置文件

authentication_windows_client

支持所有版本的连接器/NET。有关一般信息,请参阅Windows 可插入身份验证

MySQL 连接器/NET 应用程序可以使用 Windows 本机身份验证插件对 MySQL 服务器进行身份验证。登录到Windows的用户可以根据他们环境中的信息从MySQL客户端程序连接到服务器,而无需指定额外的密码。该接口匹配 MySql.Data.MySqlClient 对象。要启用,请传入Integrated Security值为 yesor的连接字符串sspi

传入用户 ID 是可选的。设置 Windows 身份验证后,将创建一个 MySQL 用户并将其配置为供 Windows 身份验证使用。默认情况下,此用户 ID 名为 auth_windows,但可以使用不同的名称进行定义。如果使用默认名称,则将用户 ID 传递给来自 Connector/NET 的连接字符串是可选的,因为它将使用auth_windows用户。否则,必须 使用标准用户 ID 元素 将该名称传递给连接字符串。

缓存_sha2_密码

最低版本:Connector/NET 8.0.11 仅适用于经典 MySQL 协议连接。有关一般信息,请参阅 缓存 SHA-2 可插入身份验证

mysql_clear_password

最低版本:Connector/NET 8.0.22 仅适用于经典 MySQL 协议连接。有关一般信息,请参阅 客户端明文可插入身份验证

mysql_clear_password需要与服务器的安全连接,客户端的任一条件都满足:

  • SslMode 连接选项的值不是 or (在 Connector/NET 8.0.29 中已弃用)该值 默认设置为。 DisabledNonePreferred

  • ConnectionProtocol 连接选项设置为 用于 unixUnix 域套接字。

mysql_native_password

支持所有版本的 Connector/NET 建立经典的 MySQL 协议和 X 协议连接。有关一般信息,请参阅 本机可插入身份验证

sha256_密码

最低版本:Connector/NET 8.0.11,用于经典 MySQL 协议连接或具有MYSQL41 机制的 X 协议连接(请参阅 Auth 连接选项)。有关一般信息,请参阅 SHA-256 可插入身份验证