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」,仍需要布建的伺服器證書。 下表描述所有案例:
| 強制通訊協定加密客戶端設定 | 信任伺服器證書客戶端設定 | 連接字串/連線屬性加密/使用數據加密 | 連接字串/連線屬性信任伺服器證書 | 結果 |
|---|---|---|---|---|
| 否 | N/A | 否 (預設值) | 已忽略 | 不會發生加密。 |
| 否 | N/A | 是的 | 否 (預設值) | 只有在有可驗證的伺服器證書時,才會進行加密,否則連線嘗試會失敗。 |
| 否 | N/A | 是的 | 是的 | 加密一律會發生,但可能會使用自我簽署的伺服器證書。 |
| 是的 | 否 | 已忽略 | 已忽略 | 只有在有可驗證的伺服器證書時,才會進行加密,否則連線嘗試會失敗。 |
| 是的 | 是的 | 否 (預設值) | 已忽略 | 加密一律會發生,但可能會使用自我簽署的伺服器證書。 |
| 是的 | 是的 | 是的 | 否 (預設值) | 只有在有可驗證的伺服器證書時,才會進行加密,否則連線嘗試會失敗。 |
| 是的 | 是的 | 是的 | 是的 | 加密一律會發生,但可能會使用自我簽署的伺服器證書。 |
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 Driver
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” 是預設值。