文档首页
MySQL Connector/NET 开发人员指南
相关文档 下载本手册

MySQL Connector/NET 开发人员指南  /  Connector/NET 连接  /  Connector/NET 身份验证

4.4 Connector/NET 身份验证

MySQL Connector/NET 实现各种身份验证插件,MySQL Server 可以调用这些插件来验证用户。可插拔式身份验证使服务器能够根据您的应用程序在建立连接时传递给服务器的用户名和主机名来确定应使用哪个插件。有关身份验证过程的完整说明,请参见 可插拔式身份验证

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

authentication_kerberos_client

有关一般信息,请参见 Kerberos 可插拔式身份验证

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

注意

Defaultauthenticationplugin 连接字符串选项对于支持无用户和无密码 Kerberos 身份验证是必需的(请参见 仅适用于经典 MySQL 协议的选项)。

启用 Kerberos 身份验证的可用性和要求因主机类型而异。Connector/NET 不为在 macOS 上运行的 .NET 应用程序提供 Kerberos 身份验证。在 Windows 上,可以使用 KerberosAuthMode 连接选项设置 Kerberos 模式(请参见 第 4.5 节,“Connector/NET 连接选项参考”)。

在 Linux 和 Windows 上运行的应用程序根据以下接口参与 Kerberos 身份验证

  • 通用安全服务应用程序编程接口 (GSSAPI)

    最低版本

    • 适用于经典 MySQL 协议连接的 Connector/NET 8.0.26。仅在 Linux 上受支持。

    • 适用于通过 MIT Kerberos 库进行经典 MySQL 协议连接的 Connector/NET 8.0.32。仅在 Windows 上受支持。

    必须在每个客户端系统上安装 MIT Kerberos,以使 MySQL 服务器能够通过 MIT Kerberos 库对 Connector/NET 的请求票证进行身份验证。需要用于 Linux 的 libgssapi_krb5.so.2 库。在 Windows 上,使用 KRB5_CONFIGKRB5CCNAME 环境变量指定使用 GSSAPI 通过 MIT Kerberos 库时配置和缓存的位置。

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

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

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

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

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

    • TGT 票证缓存。 如果您在 SSPI 模式下提供了用户名和密码以进行身份验证,则可以从 Windows 内存缓存中获取这些凭据,但获取的票证不会存储在 Kerberos 缓存中。每次都会获取新票证。

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

    有关连接过程的概述,请参见 SPPI 模式下 Windows 客户端的连接命令

authentication_ldap_sasl_client

有关一般信息,请参见 LDAP 可插拔式身份验证

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

最低版本

  • 适用于 Linux 和 Windows 的 Connector/NET 8.0.22 (SCRAM-SHA-1)。

  • 适用于 Linux 和 Windows 的 Connector/NET 8.0.23 (SCRAM-SHA-256)。

  • 适用于 Linux 的 Connector/NET 8.0.24 (GSSAPI)。

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

    IDENTIFIED WITH 'authentication_ldap_sasl'

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

authentication_oci_client

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

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

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

此外,DB 系统必须在尝试连接之前安装并加载服务器端身份验证插件。Connector/NET 实现客户端端身份验证插件。

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

为了支持 Oracle Cloud Infrastructure 短暂的基于密钥的身份验证,Connector/NET 8.0.33(及更高版本)从 security_token_file 条目中获取令牌文件的位置。例如

[DEFAULT]
fingerprint=59:8a:0b[...]
key_file=~/.oci/sessions/DEFAULT/oci_api_key.pem
tenancy=ocid1.tenancy.oc1.[...]
region=us-ashburn-1
security_token_file=~/.oci/sessions/DEFAULT/token

Connector/NET 向服务器发送一个 JSON 属性(名为 "token"),其值从 security_token_file 字段中提取。如果配置文件中引用的目标文件不存在,或者文件大小超过指定的最大值,则 Connector/NET 将终止操作并返回一个包含原因的异常。

如果以下情况,Connector/NET 会在 JSON 负载中发送一个空 token 值:

  • 安全令牌文件为空。

  • 找到配置选项 security_token_file,但配置文件中的值为空。

在所有其他情况下,Connector/NET 会将安全令牌文件的内容完整地添加到 JSON 文档中。

潜在的错误情况包括:

  • 在 OCI 配置项 'key_file' 指定的位置找不到私钥。

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

  • OCI 配置项 'key_file' 未引用有效的密钥文件。

    Connector/NET 无法加载或使用指定的私钥。

  • OCI 配置文件不包含 'fingerprint' 或 'key_file' 条目。

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

  • 无法读取 OCI 配置文件。

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

  • 找不到或未安装 OCI SDK。

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

Connector/NET 在 Oracle Cloud Infrastructure SDK 库中引用了 OCI.DotNetSDK.Common NuGet 包来读取配置文件条目值,此包必须可用。

提示

为了管理 .NET 项目的大小,请仅包含用于身份验证的必需包,而不是库中的所有包。

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

authentication_webauthn_client

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

MySQL Enterprise Edition 支持使用智能卡、安全密钥和生物识别读取器等设备对 MySQL Server 8.2.0(及更高版本)进行身份验证。此身份验证方法基于 FIDO 和 FIDO2 标准,并使用一对插件,authentication_webauthn 在服务器端,authentication_webauthn_client 在客户端。Connector/NET 8.2.0 支持客户端 WebAuthn 身份验证插件。

WebAuthn 身份验证方法可以直接用于单因素身份验证 (1FA),也可以与现有的 MySQL 身份验证方法结合使用,以支持使用 2FA 或 3FA 的帐户。Connector/NET 提供了一个回调机制,用于通知应用程序用户将与 FIDO/FIDO2 设备(通过其身份验证器)进行交互。例如:

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

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

如果满足以下要求,Connector/NET 将通知应用程序它正在期待用户与 FIDO/FIDO2 设备进行交互。

  • FIDO/FIDO2 设备必须为每个用户帐户关联的特定身份验证因素注册。

  • 应用程序、Connector/NET 和 FIDO/FIDO2 设备必须在同一主机上或在可信网络内。

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

身份验证过程在经过合理的时间间隔后(未进行用户设备交互)将终止。

注意

相关的 authentication_fido_client 插件和 FidoActionCallback 回调(两者都在 Connector/NET 8.0.29 中添加)已在 Connector/NET 8.4.0 中删除,以支持使用 WebAuthn 身份验证。

authentication_windows_client

Connector/NET 的所有版本均支持。有关一般信息,请参阅 Windows 可插拔身份验证

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

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

caching_sha2_password

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

mysql_clear_password

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

mysql_clear_password 需要与服务器建立安全连接,这可以通过客户端的以下两种情况之一来满足。

  • SslMode 连接选项的值不为 DisabledNone(在 Connector/NET 8.0.29 中已弃用)。默认情况下,该值设置为 Preferred

  • ConnectionProtocol 连接选项设置为 unix,用于 Unix 域套接字。

mysql_native_password

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

注意

从 MySQL Server 8.4.0 开始,mysql_native_password 插件默认情况下已禁用,从 MySQL Server 9.0.0 开始已删除。

sha256_password

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

注意

从 MySQL Server 8.0.16 开始,sha256_password 插件已弃用,并且可能会在将来的版本中被删除。