使用不带验证的加密
SQL Server 始终对与登录关联的网络数据包加密。如果服务器启动时其上并未设置任何证书,SQL Server 将生成自签名证书,可用于对登录数据包加密。
应用程序还可以通过使用连接字符串关键字或连接属性请求对所有网络流量加密。将访问接口字符串用于 IDbInitialize::Initialize 时,ODBC 和 OLE DB 中的关键字为 "Encrypt";将初始化字符串用于 IDataInitialize 时,ADO 和 OLE DB 中的关键字为 "Use Encryption for Data"。还可以通过 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。