适用于:SQL Server 2022 (16.x) 及更高版本
严格的连接加密强制执行良好的安全做法,并使标准网络设备可以管理 SQL Server 流量。 严格加密使用表格数据流 (TDS) 8.0,它将 TDS 会话包装在传输层安全性(TLS)中,以便进行端到端加密。
本文介绍如何使用严格的连接类型连接到 SQL Server 2022(16.x)及更高版本。
先决条件
- SQL Server 2022 (16.x) 或更高版本
- 适用于 SQL Server 的 ODBC 或 OLE DB 驱动程序
- ODBC Driver for SQL Server 18.1.2.1 版本或更高版本
- OLE DB Driver for SQL Server 19.2.0 版本或更高版本
- 为 SQL Server 创建并安装传输层安全 (TLS) 证书。 有关详细信息,请参阅启用数据库引擎的加密连接
使用 .NET 应用程序连接 SQL Server
有关使用 strict 加密类型生成和连接到 SQL Server 的信息,请参阅有关如何正确生成连接字符串的连接字符串语法。 有关新的连接字符串属性的详细信息,请参阅连接字符串加密属性的其他更改。
使用 ODBC DSN 进行连接
可以使用 ODBC DSN 到 SQL Server 测试连接加密类型为 Strict 的连接。
在 Windows 中搜索 ODBC 数据源应用。
通过查看 ODBC 数据源管理员的“驱动程序”选项卡,确保具有最新的 ODBC 驱动程序。
在“系统 DSN”选项卡中,选择“添加”以创建 DSN。 然后选择 ODBC Driver 18 for SQL Server。 选择“完成”。 我们将使用它来测试连接。
在“创建 SQL Server 的新数据源”窗口中,提供此数据源的名称,并将 SQL Server 2022 (16.x) 服务器名称添加到“服务器”。 选择下一步。
在进入具有连接加密的屏幕之前,使用所有设置的所有默认值。 选择“严格”。 如果输入的服务器名称不同于证书中的名称,或者改用 IP 地址,请将证书中的 HostName 设置为证书中使用的主机名。 选择“完成”。
当“ODBC Microsoft SQL Server 安装程序”对话框弹出时,选择“测试数据源...”按钮以测试连接。 这应该针对此测试强制执行到 SQL Server 的
strict连接。
使用通用数据链接进行连接
还可以使用具有通用数据链接 (UDL) 的 OLE DB 驱动程序测试与具有 strict 加密的 SQL Server 的连接。
若要创建 UDL 文件以测试连接,请右键单击桌面,然后选择“新建文本文档”>。 需要将扩展从
txt更改为udl. 你可以用任何你想要的名字给文件命名。注意
需要能够查看扩展名称,以便将扩展从
txt此更改为udl。 如果看不到该扩展名,则可以通过打开文件资源管理器>视图>显示>文件扩展名来查看扩展名。打开创建的 UDL 文件,然后转到“提供程序”选项卡,选择“Microsoft OLE DB Driver 19 for SQL Server”。 选择下一步>>。
在“连接”选项卡上,输入 SQL Server 服务器名称,然后选择用于登录 SQL Server 的身份验证方法。
在“高级”选项卡中,对于“连接加密”,选择“严格”。 如果输入的服务器名称不同于证书中的名称,或者改用 IP 地址,请将证书中的 HostName 设置为证书中使用的主机名。 完成后,返回到“连接”选项卡。
选择测试连接以测试具有
strict连接加密的连接。
使用 SSMS 进行连接
从版本 20 开始,可以在“连接到服务器”对话框的“登录名”选项卡上的“SQL Server Management Studio”(SSMS)中强制实施严格的加密:
连接到 AlwaysOn 可用性组
从 SQL Server 2025(17.x)开始,可以使用 Strict 或 Mandatory 连接加密类型加密 Windows Server 故障转移群集与 Always On 可用性组副本之间的通信。 如果可用性组基于 Windows Server 故障转移群集,则只能强制执行加密。 其他类型的可用性组不支持严格的加密。
注意
数据库镜像终结点的加密是单独配置的,不支持 TLS。 有关详细信息,请参阅 可用性组和数据库镜像中的传输安全性。
这些步骤因您的可用性是否已存在而异。
若要强制对新的可用性组进行严格加密,请执行以下步骤:
- 如果尚未导入 TLS 证书,请根据证书要求将 TLS 证书导入可用性组的每个副本。 导入证书后重启每个 SQL Server 实例。
- 使用本文中所述的方法之一测试与每个 SQL Server 副本的连接,以强制加密。
-
CREATE AVAILABILITY GROUP,在可用性组的
CLUSTER_CONNECTION_OPTIONS子句中将Encrypt属性设置为Strict。 这可确保与可用性组的所有连接都使用指定的加密类型。 - 如果可用性组当前处于联机状态,则将可用性组故障转移到次要副本,以将新的加密设置应用到可用性组。 如果可用性组无法联机,可能是
ClusterConnectionOptions未正确设置。 检查 cluster.log 是否存在与群集无法连接到 SQL Server 副本相关的 ODBC 错误 。 您可以选择在新的次要副本处于联机状态并连接到可用性组后,将可用性组故障转移回原始主要副本。 - (可选)通过将 “强制严格加密 ”选项设置为
Yes每个副本的连接协议的 SQL Server 配置管理器 属性,可以进一步强制加密。 此设置可确保与可用性组副本的所有连接都使用严格的加密。 更改此设置后,重启每个 SQL Server 副本。
连接到故障转移群集实例
从 SQL Server 2025 (17.x)开始,可以使用或Strict连接加密类型,加密 Windows Server 故障转移群集与Mandatory之间的通信。 为此,请执行以下步骤:
- 如果尚未导入 TLS 证书,请根据证书要求将 TLS 证书导入到故障转移群集的每个节点。 导入证书后重启 SQL Server 实例。
- 使用本文中提到的强制加密方法之一来测试到故障转移群集实例的连接。
-
ALTER SERVER CONFIGURATION使用
CLUSTER_CONNECTION_OPTIONS子句将Encrypt属性设置为Mandatory或Strict。 这可确保与故障转移群集实例的所有连接都使用指定的加密类型。 - 将实例故障转移到次要节点,以将新的加密设置应用到故障转移群集实例。 如果故障转移群集实例无法联机,可能是
ClusterConnectionOptions未正确设置。 检查 cluster.log 以查找与群集无法连接到 SQL Server 实例相关的 ODBC 错误。 您可以选择在新的次要节点处于联机状态并连接到故障转移群集实例后,将实例故障转移回原始主要节点。 - (可选)可以通过将 “强制严格加密 ”选项设置为
Yes群集中每个节点的连接协议的 SQL Server 配置管理器 属性来进一步强制加密。 此设置可确保与故障转移群集实例的所有连接都使用严格的加密。 对次要节点进行此更改,将实例故障转移到该节点,然后对主要节点进行更改。
SQL Server 代理 连接加密
从 SQL Server 2025(17.x)开始,SQL Server 代理使用 Microsoft ODBC Driver 18 for SQL Server,该驱动程序支持 TDS 8.0 和 TLS 1.3。 SQL Server 代理自动调整其连接加密,以匹配SQL Server实例的配置方式。
SQL Server 代理 如何确定加密方式
SQL Server 代理启动时,它会在本地计算机上查询以下注册表项,以确定为SQL Server配置的加密级别:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.<InstanceName>\MSSQLServer\SuperSocketNetLib\ForceEncryptionHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.<InstanceName>\MSSQLServer\SuperSocketNetLib\ForceStrict-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.<InstanceName>\MSSQLServer\SuperSocketNetLib\SubjectAlternativeName(SQL Server 2025 (17.x) 中的新增功能)
根据这些值,SQL Server 代理选择其连接模式:
- 如果启用了强制严格加密,SQL Server 代理使用
strict(TDS 8.0) 进行连接。 - 如果启用强制加密,SQL Server 代理使用
mandatory(TDS 7.x) 进行连接。 - 如果两者均未启用,SQL Server 代理使用
optional(TDS 7.x) 进行连接。
本地 T-SQL 作业步骤继承与SQL Server 代理服务相同的加密配置。 如果SQL Server 代理连接strict,则服务器上本地运行的 T-SQL 作业使用相同的选项。
Important
TLS 1.3 仅适用于严格的加密。 如果SQL Server实例仅在 OS 级别启用了 TLS 1.3,但仅设置了强制加密(而不是强制加密),SQL Server 代理无法启动,因为mandatory模式optional需要 TDS 7.x,这与 TLS 1.3 不兼容。
TLS 和加密配置矩阵
| 已启用 TLS 版本 | 配置设置 | SQL Server 代理结果 | Notes |
|---|---|---|---|
| 仅支持 TLS 1.3 | 强制严格加密 | 连接成功 | TDS 8.0 使用严格加密 |
| 仅支持 TLS 1.3 | 强行加密 | 无法连接 | TLS 1.3 要求严格 |
| 仅支持 TLS 1.3 | None | 无法连接 | TLS 1.3 需要严格加密 |
| 仅支持 TLS 1.2 | 强制严格加密 | 连接成功 | TDS 8.0 可以使用 TLS 1.2 |
| 仅支持 TLS 1.2 | 强行加密 | 连接成功 | 具有强制要求的 TDS 7.x |
| 仅支持 TLS 1.2 | None | 连接成功 | 具有可选选项的 TDS 7.x |
| TLS 1.2 和 TLS 1.3 | 强制严格加密 | 连接成功 | TDS 8.0 使用严格加密 |
| TLS 1.2 和 TLS 1.3 | 强行加密 | 连接成功 | 具有强制要求的 TDS 7.x |
| TLS 1.2 和 TLS 1.3 | None | 连接成功 | 具有可选选项的 TDS 7.x |
验证 SQL Server 代理的协商加密
SQL Server 代理连接后,运行以下查询以确认其加密模式:
SELECT s.session_id, c.encrypt_option, s.program_name, s.client_interface_name, s.nt_user_name
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
ON c.session_id = s.session_id
WHERE s.program_name LIKE 'SQLAgent%';
当 SQL Server 代理 以加密方式连接时,encrypt_option列返回TRUE。
有关SQL Server 代理本身的概述,请参阅SQL Server 代理。
使用 SQL Server 配置管理器 强制严格加密
可以从 SQL Server 2022(16.x)开始,使用 SQL Server 配置管理器 强制实施严格的加密。 为此,请执行以下步骤:
打开 SQL Server 配置管理器。
在左窗格中,展开 SQL Server 网络配置,然后选择 [InstanceName] 的协议。
右键单击 TCP/IP,然后选择“ 属性”。
在“TCP/IP 属性”对话框中,转到“标志”选项卡,然后选择“强制严格加密”选项的“是”:
在维护时段内重启 SQL Server 实例以应用更改。
注解
如果看到 SSL certificate validation failed,请验证以下项:
- 服务器证书在用于测试的计算机上有效
- 以下至少一个条件成立:
- 提供程序 SQL Server 会匹配证书中的 CA 名称或 DNS 名称之一。
-
HostNameInCertificate连接字符串属性与证书中的 CA 名称或 DNS 名称之一匹配。