在 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 (SSMS) 中移除。 不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 開發新的應用程式。 往後請改用新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。 如需 SQL Server 資料庫引擎元件隨附的 SQLNCLI(版本 2012 到 2019),請參閱此 支援生命週期例外狀況

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 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」。 它接受是或否值;否 是預設值。 使用服務元件時,它會接受 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 功能