共用方式為


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

適用於:SQL ServerAzure SQL DatabaseAzure 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」,仍需要布建的伺服器證書。 下表描述所有案例:

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

警告

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

SQL Server Native Client OLE DB 提供者

SQL Server Native Client OLE DB 提供者透過新增SSPROP_INIT_TRUST_SERVER_CERTIFICATE數據源初始化屬性來支援加密,該屬性是在DBPROPSET_SQLSERVERDBINIT屬性集中實作。 此外,已新增 連接字串 「TrustServerCertificate」 關鍵詞 「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” 是預設值。

另請參閱

SQL Server Native Client 功能