使用加密而不需驗證
SQL Server 一律會加密與登入有關的網路封包。 如果當它啟動時未在伺服器上提供任何憑證,SQL Server 會產生自行簽署的憑證,該憑證會用來加密登入封包。
應用程式也可要求加密所有網路流量,其方式是使用連接字串關鍵字或連接屬性。 當搭配 IDbInitialize::Initialize 使用提供者字串時,關鍵字為 "Encrypt" (適用於 ODBC 和 OLE DB);當搭配 IDataInitialize 使用初始化字串時,關鍵字為 "Use Encryption for Data" (適用於 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"。 它可接受 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"。