使用不带验证的加密
SQL Server 始终对与登录相关的网络数据包进行加密。 如果服务器在启动时未预配有任何证书,SQL Server 将生成可用于加密登录数据包的自签名证书。
应用程序还可以通过使用连接字符串关键字或连接属性请求对所有网络流量加密。 将提供程序字符串与 IDbInitialize::Initialize 配合使用时,对于 ODBC 和 OLE DB,关键字为“Encrypt”;在 IDataInitialize 中使用初始化字符串时,对于 ADO 和 OLE DB,关键字为“对数据使用加密”。 这也可以由SQL Server 配置管理器使用强制协议加密选项进行配置。 默认情况下,对某一连接的所有网络流量加密要求在服务器上设置证书。
有关连接字符串关键字的信息,请参阅将连接字符串关键字与SQL Server Native Client配合使用。
若要在尚未在服务器上预配证书时启用加密,可以使用 SQL Server 配置管理器 设置强制协议加密和信任服务器证书选项。 在这种情况下,如果服务器上未设置可验证的证书,加密将使用不带验证的自签名服务器证书。
应用程序还可以使用 "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”。 它接受值 yes 或 no;默认值为 no。 使用服务组件时,它接受值 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"。 它接受值 yes 或 no;默认值为 no。