在 SQL Server Native Client 中使用加密而不驗證
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics 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” 是預設值。