共用方式為


在 SQL Server Native Client 中使用加密而不驗證

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) 未隨附:

  • SQL Server 2022 (16.x) 及更新版本
  • SQL Server Management Studio 19 與更新版本

不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用開發。

針對新專案,請使用下列其中一個驅動程式:

針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況

SQL Server 一律會加密與登入有關的網路封包。 如果啟動時未在伺服器上布建任何憑證,SQL Server 會產生用來加密登入封包的自我簽署憑證。

自我簽署憑證不保證安全性。 加密的交握會以 NT LAN Manager (NTLM) 為基礎。 您應該在 SQL Server 上布建可驗證的憑證,以確保安全連線。 傳輸層安全性 (TLS) 只能透過憑證驗證來保護。

應用程式也可以使用連接字串關鍵詞或連線屬性來要求加密所有網路流量。 搭配 使用提供者字串時 IDbInitialize::Initialize,ODBC 和 OLE DB 的關鍵詞為 “Encrypt”,或使用初始化字串搭配 IDataInitialize時,針對 ADO 和 OLE DB 使用「使用數據加密」。 這也可以由 SQL Server 組態管理員使用 [強制通訊協定加密 ] 選項來設定,以及將客戶端設定為要求加密連線。 根據預設,連線的所有網路流量加密都需要在伺服器上布建憑證。 藉由將客戶端設定為信任伺服器上的憑證,您就很容易遭受中間人攻擊。 如果您在伺服器上部署可驗證的憑證,請確定您將有關信任憑證的客戶端設定變更為 FALSE

如需 連接字串 關鍵詞的相關信息,請參閱搭配 SQL Server Native Client 使用連接字串關鍵詞。

若要在伺服器上未布建憑證時啟用加密,SQL Server 組態管理員可用來設定 強制通訊協定加密信任伺服器證書 選項。 在此情況下,如果伺服器上未布建任何可驗證的憑證,加密會使用自我簽署的伺服器憑證,而不需要驗證。

應用程式也可以使用 TrustServerCertificate 關鍵詞或其相關聯的連接屬性來保證加密發生。 應用程式設定永遠不會降低 SQL Server 用戶端組態管理員所設定的安全性層級,但可以加強它。 例如,如果未為客戶端設定 強制通訊協定加密 ,應用程式可能會要求加密本身。 為了保證即使未布建伺服器證書,應用程式仍可能會要求加密和 TrustServerCertificate。 不過,如果未 TrustServerCertificate 在用戶端設定中啟用,仍需要布建的伺服器證書。 下表描述所有案例:

強制通訊協定加密用戶端設定 信任伺服器憑證用戶端設定 資料的連接字串/連接屬性加密/使用加密 連接字串/連接屬性信任伺服器憑證 結果
N/A 無 (預設值) 忽略 不發生任何加密。
N/A 無 (預設值) 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。
N/A 加密一律會發生,但可能會使用自我簽署的伺服器證書。
忽略 忽略 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。
無 (預設值) 忽略 加密一律會發生,但可能會使用自我簽署的伺服器證書。
無 (預設值) 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。
加密一律會發生,但可能會使用自我簽署的伺服器證書。

警告

上表僅提供有關在不同設定下系統行為的指南。 若要安全連線,請確定客戶端和伺服器都需要加密。 也請確定伺服器具有可驗證的憑證,且 TrustServerCertificate 用戶端上的設定設為 FALSE

SQL Server Native Client OLE DB 提供者

SQL Server Native Client OLE DB 提供者透過新增在屬性集中實DBPROPSET_SQLSERVERDBINIT作的SSPROP_INIT_TRUST_SERVER_CERTIFICATE數據源初始化屬性,支援加密而不進行驗證。 此外,新增了新的連接字串關鍵字 TrustServerCertificate。 它會接受 yesno 值; no 是預設值。 使用服務元件時,它會接受 truefalse 值; false 是預設值。

如需屬性集增強 DBPROPSET_SQLSERVERDBINIT 功能的詳細資訊,請參閱 初始化和授權屬性 (Native Client OLE DB Provider)

SQL Server Native Client ODBC Driver

SQL Server Native Client ODBC 驅動程式透過新增 SQLSetConnectAttr 和 SQLGetConnectAttr 函式來支援加密,而不需要驗證。 SQL_COPT_SS_TRUST_SERVER_CERTIFICATE 已新增以接受 SQL_TRUST_SERVER_CERTIFICATE_YESSQL_TRUST_SERVER_CERTIFICATE_NO,且 SQL_TRUST_SERVER_CERTIFICATE_NO 為預設值。 此外,新增了新的連接字串關鍵字 TrustServerCertificate。 它會接受 yesno 值; no 是預設值。