SQL Server 始终对与登录相关的网络数据包进行加密。 如果在启动时未在服务器上预配任何证书,SQL Server 将生成用于加密登录数据包的自签名证书。
应用程序还可以使用连接字符串关键字或连接属性请求对所有网络流量进行加密。 在将提供程序字符串与 IDbInitialize::Initialize 配合使用时,关键字是 ODBC 和 OLE DB 的“Encrypt”,在将初始化字符串与 IDataInitialize 配合使用时,将 ADO 和 OLE DB 用于“使用数据加密”。 也可以使用 “强制协议加密 ”选项由 SQL Server 配置管理器配置。 默认情况下,对连接的所有网络流量进行加密要求在服务器上预配证书。
有关连接字符串关键字的信息,请参阅 将连接字符串关键字与 SQL Server Native Client 配合使用。
若要在服务器上未预配证书时启用加密,可以使用 SQL Server Configuration Manager 设置 强制协议加密 和 信任服务器证书 选项。 在这种情况下,如果未在服务器上预配任何可验证证书,加密将使用自签名服务器证书。
应用程序还可以使用“TrustServerCertificate”关键字或其关联的连接属性来保证加密发生。 应用程序设置永远不会降低 SQL Server 客户端配置管理器设置的安全级别,但可能会加强它。 例如,如果未为客户端设置 强制协议加密 ,应用程序可能会请求加密本身。 为了保证加密,即使尚未预配服务器证书,应用程序也可以请求加密和“TrustServerCertificate”。 但是,如果未在客户端配置中启用“TrustServerCertificate”,则仍需要预配的服务器证书。 下表描述了所有情况:
| 强制协议加密客户端设置 | 信任服务器证书客户端设置 | 连接字符串/连接属性加密/对数据使用加密 | 连接字符串/连接属性信任服务器证书 | 结果 |
|---|---|---|---|---|
| 否 | 无 | 否(默认值) | 忽略 | 无加密。 |
| 否 | 无 | 是的 | 否(默认值) | 仅当存在可验证的服务器证书时,加密才会发生,否则连接尝试会失败。 |
| 否 | 无 | 是的 | 是的 | 始终加密,但可能使用自签名的服务器证书。 |
| 是的 | 否 | 忽略 | 忽略 | 仅当存在可验证的服务器证书时,加密才会发生,否则连接尝试会失败。 |
| 是的 | 是的 | 否(默认值) | 忽略 | 始终加密,但可能使用自签名的服务器证书。 |
| 是的 | 是的 | 是的 | 否(默认值) | 仅当存在可验证的服务器证书时,加密才会发生,否则连接尝试会失败。 |
| 是的 | 是的 | 是的 | 是的 | 加密始终发生,但可能会使用自签名服务器证书。 |
SQL Server Native Client OLE DB 访问接口
SQL Server Native Client OLE DB 访问接口通过添加SSPROP_INIT_TRUST_SERVER_CERTIFICATE数据源初始化属性(在DBPROPSET_SQLSERVERDBINIT属性集中实现)支持加密,而无需验证。 此外,添加了新的连接字符串关键字“TrustServerCertificate”。 它接受是或否值;否为默认值。 使用服务组件时,它接受 true 或 false 值;false 为默认值。
有关DBPROPSET_SQLSERVERDBINIT属性集的增强功能的详细信息,请参阅 初始化和授权属性。
SQL Server Native Client ODBC 驱动程序
SQL Server Native Client ODBC 驱动程序通过添加 SQLSetConnectAttr 和 SQLGetConnectAttr 函数支持加密,而无需验证。 已添加SQL_COPT_SS_TRUST_SERVER_CERTIFICATE以接受SQL_TRUST_SERVER_CERTIFICATE_YES或SQL_TRUST_SERVER_CERTIFICATE_NO,SQL_TRUST_SERVER_CERTIFICATE_NO为默认值。 此外,添加了新的连接字符串关键字“TrustServerCertificate”。 它接受是或否值;“no”是默认值。