使用严格加密连接到 SQL Server

适用于: SQL Server 2022 (16.x)

严格的连接加密强制执行良好的安全做法,并使标准网络设备可以管理 SQL Server 流量。

本文介绍如何使用严格的连接类型连接到 SQL Server 2022(16.x)及更高版本。

先决条件

使用 .NET 应用程序连接 SQL Server

有关使用 strict 加密类型生成和连接到 SQL Server 的信息,请参阅有关如何正确生成连接字符串的连接字符串语法。 有关新的连接字符串属性的详细信息,请参阅连接字符串加密属性的其他更改

使用 ODBC DSN 进行连接

可以使用 ODBC DSN 到 SQL Server 测试连接加密类型为 Strict 的连接。

  1. 在 Windows 中搜索 ODBC 数据源应用

    ODBC 数据源应用的屏幕截图。

  2. 通过查看 ODBC 数据源管理员的“驱动程序”选项卡,确保具有最新的 ODBC 驱动程序

    可用驱动程序的屏幕截图。

  3. 在“系统 DSN”选项卡中,选择“添加”以创建 DSN。 然后选择 ODBC Driver 18 for SQL Server。 选择“完成”。 我们将使用它来测试连接。

  4. 在“创建 SQL Server 的新数据源”窗口中,提供此数据源的名称,并将 SQL Server 2022 (16.x) 服务器名称添加到“服务器”。 选择下一步

    使用 ODBC 驱动程序创建数据源的屏幕截图。

  5. 使用所有设置的所有默认值,直到到达具有连接加密的屏幕。 选择“严格”。 如果输入的服务器名称不同于证书中的名称,或者改用 IP 地址,请将证书中的 HostName 设置为证书中使用的主机名。 选择“完成”。

    显示严格加密类型的屏幕截图。

  6. 当“ODBC Microsoft SQL Server 安装程序”对话框弹出时,选择“测试数据源...”按钮以测试连接。 这应该会针对此测试强制执行对 SQL Server 的 strict 连接。

还可以使用具有通用数据链接 (UDL) 的 OLE DB 驱动程序测试与具有 strict 加密的 SQL Server 的连接。

  1. 若要创建 UDL 文件以测试连接,请右键单击桌面,然后选择“新建文本文档”>。 需要将扩展名从 txt 更改为 udl。 你可以用任何你想要的名字给文件命名。

    注意

    需要能够查看扩展名称才能将扩展名从 txt 更改为 udl。 如果看不到该扩展名,可以通过打开“文件资源管理器”“查看”>“显示”“文件扩展名”来启用查看扩展名>>

  2. 打开创建的 UDL 文件,然后转到“提供程序”选项卡,选择“Microsoft OLE DB Driver 19 for SQL Server”。 选择下一步>>

    UDL 提供程序屏幕的屏幕截图。

  3. 在“连接”选项卡上,输入 SQL Server 服务器名称,然后选择用于登录 SQL Server 的身份验证方法

    UDL 连接屏幕的屏幕截图。

  4. 在“高级”选项卡中,对于“连接加密”,选择“严格”。 如果输入的服务器名称不同于证书中的名称,或者改用 IP 地址,请将证书中的 HostName 设置为证书中使用的主机名。 完成后,返回到“连接”选项卡

    UDL 高级屏幕的屏幕截图。

  5. 选择“测试连接”以测试具有 连接加密的连接strict

    UDL 连接屏幕和测试连接的屏幕截图。

使用 SSMS 进行连接

从版本 20 开始,可以在“连接到服务器”对话框的“登录名”选项卡上的“SQL Server Management Studio”(SSMS)中强制实施严格的加密:

SQL Server Management Studio 中“连接到服务器”对话框的屏幕截图。

连接到 AlwaysOn 可用性组

从 SQL Server 2025 (17.x)预览版开始,可以使用StrictMandatory连接加密类型,加密 Windows Server 故障转移群集与 Always On 可用性组副本之间的通信。 如果可用性组基于 Windows Server 故障转移群集,则只能强制加密。 其他类型的可用性组不支持严格的加密。

这些步骤因可用性是否已存在而异。

若要强制对新的可用性组进行严格加密,请执行以下步骤:

  1. 如果尚未导入 TLS 证书,请根据证书要求TLS 证书导入可用性组的每个副本。 导入证书后重启每个 SQL Server 实例。
  2. 使用本文中所述的方法之一测试与每个 SQL Server 副本的连接,以强制加密。
  3. 在可用性组的子句中设置为Encrypt属性的 StrictCLUSTER_CONNECTION_OPTIONS。 这可确保与可用性组的所有连接都使用指定的加密类型。
  4. 如果可用性组当前处于联机状态,则将可用性组故障转移到次要副本,以将新的加密设置应用到可用性组。 如果可用性组无法联机,可能是 ClusterConnectionOptions 未正确设置。 检查 cluster.log 是否存在与群集无法连接到 SQL Server 副本相关的 ODBC 错误 。 或者,在新的辅助副本联机并连接到可用性组后,可以将可用性组故障回复到原始主副本。
  5. (可选)通过将 “强制严格加密 ”选项设置为 Yes 每个副本的连接协议的 SQL Server Configuration Manager 属性,可以进一步强制加密。 此设置可确保与可用性组副本的所有连接都使用严格的加密。 更改此设置后,重启每个 SQL Server 副本。

连接到故障转移群集实例

从 SQL Server 2025(17.x)预览版开始,您可以使用StrictMandatory连接加密类型加密 Windows Server 故障转移群集与Always On 故障转移群集实例之间的通信。 为此,请执行以下步骤:

  1. 如果尚未导入 TLS 证书,请根据证书要求TLS 证书导入到故障转移群集的每个节点。 导入证书后重启 SQL Server 实例。
  2. 使用本文所述的强制加密方法之一测试到故障转移群集实例的连接。
  3. 属性CLUSTER_CONNECTION_OPTIONS设置为或 Encrypt. 的子句的 MandatoryStrict。 这可确保与故障转移群集实例的所有连接都使用指定的加密类型。
  4. 将实例故障转移到辅助节点,以将新的加密设置应用到故障转移群集实例。 如果故障转移群集实例无法联机,可能是 ClusterConnectionOptions 未正确设置。 检查与群集无法连接到 SQL Server 实例相关的 ODBC 错误的cluster.log。 (可选)可以在新的辅助节点联机并连接到故障转移群集实例后将实例故障回复到原始主节点。
  5. (可选)可以通过将 “强制严格加密 ”选项设置为 Yes 群集中每个节点的连接协议的 SQL Server Configuration Manager 属性来进一步强制加密。 此设置可确保与故障转移群集实例的所有连接都使用严格的加密。 在辅助节点上进行此更改,将实例故障转移到该节点,然后在主节点上进行更改。

使用 SQL Server Configuration Manager 强制严格加密

可以从 SQL Server 2022(16.x)开始,使用 SQL Server Configuration Manager 强制实施严格的加密。 为此,请执行以下步骤:

  1. 打开 SQL Server 配置管理器

  2. 在左窗格中,展开 SQL Server 网络配置,然后选择 [InstanceName] 的协议

  3. 右键单击 TCP/IP,然后选择“ 属性”。

  4. “TCP/IP 属性”对话框中,转到“标志”选项卡,然后选择“强制严格加密”选项的“是”:

    SQL Server Configuration Manager 中强制严格加密选项的屏幕截图。

  5. 在维护时段内重启 SQL Server 实例以应用更改。

注解

如果看到 SSL certificate validation failed,请验证以下项:

  • 服务器证书在用于测试的计算机上有效
  • 以下至少一个条件成立:
    • 提供程序 SQL Server 与证书中的 CA 名称或其中一个 DNS 名称匹配。
    • HostNameInCertificate 连接字符串属性与证书中的 CA 名称或 DNS 名称之一匹配。