在 SQL Server Native Client 中使用加密而不验证

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) 未随附:

  • SQL Server 2022 (16.x) 及更高版本
  • SQL Server Management Studio 19 及更高版本

不建议在新应用开发中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。

对于新项目,请使用以下驱动程序之一:

对于作为 SQL Server 数据库引擎组件(版本 2012 到 2019)随附的 SQLNCLI,请参阅此支持生命周期特例

SQL Server 始终对与登录相关的网络数据包进行加密。 如果在启动时未在服务器上预配证书,SQL Server 将生成用于加密登录数据包的自签名证书。

自签名证书不能保证安全性。 加密握手基于 NT LAN Manager (NTLM)。 应在 SQL Server 上预配可验证证书以确保安全连接。 传输安全性层 (TLS) 只能通过证书验证来确保安全。

应用程序还可以使用连接字符串关键字或连接属性请求对所有网络流量进行加密。 当将提供程序字符串与 IDbInitialize::Initialize 一起使用时,关键字是 ODBC 和 OLE DB 的“Encrypt”,在将初始化字符串用于 IDataInitializeADO 和 OLE DB 时为“使用加密数据”。 还可以使用 “强制协议加密 ”选项和配置客户端来请求加密连接,由 SQL Server 配置管理器对此进行配置。 默认情况下,对连接的所有网络流量进行加密要求在服务器上预配证书。 通过将客户端设置为信任服务器上的证书,你容易受到中间人攻击。 如果在服务器上部署可验证证书,请确保将有关信任证书的客户端设置更改为 FALSE

有关连接字符串关键字的信息,请参阅将连接字符串关键字与 SQL Server Native Client 配合使用。

若要在服务器上未预配证书时启用加密,可以使用 SQL Server Configuration Manager 设置 强制协议加密信任服务器证书 选项。 在这种情况下,如果未在服务器上预配任何可验证证书,加密将使用无验证的服务器证书。

应用程序还可以使用 TrustServerCertificate 关键字或其关联的连接属性来保证加密发生。 应用程序设置永远不会降低 SQL Server 客户端配置管理器设置的安全级别,但可以加强它。 例如,如果未为客户端设置 强制协议加密 ,应用程序可能会请求加密本身。 为了保证加密,即使未预配服务器证书,应用程序也可能请求加密。TrustServerCertificate 但是,如果未在客户端配置中启用 TrustServerCertificate,则仍需要提供服务器证书。 下表介绍了各种情况:

“强制协议加密”客户端设置 “信任服务器证书”客户端设置 连接字符串/连接属性加密/对数据使用加密 连接字符串/连接属性信任服务器证书 结果
空值 否(默认值) 忽略 无加密。
空值 否(默认值) 仅当存在可验证的服务器证书时才加密,否则连接尝试将失败。
空值 始终加密,但可能使用自签名的服务器证书。
忽略 忽略 仅当存在可验证的服务器证书时才加密,否则连接尝试将失败。
否(默认值) 忽略 始终加密,但可能使用自签名的服务器证书。
否(默认值) 仅当存在可验证的服务器证书时才加密,否则连接尝试将失败。
始终加密,但可能使用自签名的服务器证书。

注意

上表只提供了不同配置下系统行为的指南。 若要安全连接,请确保客户端和服务器都需要加密。 另请确保服务器有可验证的证书,且客户端上的 TrustServerCertificate 设置设为 FALSE

SQL Server Native Client OLE DB 访问接口

SQL Server Native Client OLE DB 访问接口通过添加在属性集中实现DBPROPSET_SQLSERVERDBINITSSPROP_INIT_TRUST_SERVER_CERTIFICATE数据源初始化属性支持加密,而无需进行验证。 此外,添加了新的连接字符串关键字 TrustServerCertificate。 它接受 yesno 值; no 是默认值。 使用服务组件时,它接受 truefalse 值; false 是默认值。

有关对属性集的DBPROPSET_SQLSERVERDBINIT增强功能的详细信息,请参阅初始化和授权属性(Native Client OLE DB Provider)。

SQL Server Native Client ODBC 驱动程序

SQL Server Native Client ODBC 驱动程序通过添加 SQLSetConnectAttrSQLGetConnectAttr 函数支持加密,而无需验证。 SQL_COPT_SS_TRUST_SERVER_CERTIFICATE已添加以接受或SQL_TRUST_SERVER_CERTIFICATE_YESSQL_TRUST_SERVER_CERTIFICATE_NOSQL_TRUST_SERVER_CERTIFICATE_NO设置为默认值。 此外,添加了新的连接字符串关键字 TrustServerCertificate。 它接受 yesno 值; no 是默认值。