OLE DB 中的加密和憑證驗證

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

下載 OLE DB 驅動程式

SQL Server 一律會加密與登入有關的網路封包。 如果伺服器未提供憑證佈建,則在啟動時,SQL Server 會產生自我簽署憑證,其中還用它來對登入封包進行加密。

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

應用程式也可要求加密所有網路流量,其方式是使用連接字串關鍵字或連接屬性。 當搭配 IDbInitialize::Initialize 使用提供者字串時,關鍵字為 "Encrypt" (適用於 OLE DB);當搭配 IDataInitialize 使用初始化字串時,關鍵字為 "Use Encryption for Data" (適用於 ADO 和 OLE DB)。 您也可以使用 [ 強制通訊協定加密] 選項,在登錄中的用戶端電腦上設定加密 。 如需詳細資訊,請參閱 登錄設定 。 根據預設,加密連線的所有網路流量會要求在伺服器上提供憑證。 藉由將您的用戶端設定為信任伺服器上的憑證,您可能很容易受到中間人攻擊。 如果您在伺服器上部署可驗證的憑證,請務必將有關信任憑證的用戶端設定變更為 FALSE。

如需連接字串關鍵字的資訊,請參閱搭配 OLE DB Driver for SQL Server 使用連接字串關鍵字

如要在未於伺服器上佈建憑證的情況下啟用加密以便使用,可以設定 Force Protocol EncryptionTrust Server Certificate 用戶端登錄設定。 在此情況下,如果未在伺服器上布建任何可驗證的憑證,加密會使用自我簽署的伺服器憑證,而不需要驗證。

加密和憑證驗證行為

應用程式設定永遠不會降低登錄中的安全性設定層級,但可能會加強它。 如需詳細資訊,請參閱 登錄設定 。 例如,如果未針對用戶端設定 Force Protocol Encryption,應用程式可能會自行要求加密。 如果要保證加密,甚至是在尚未提供伺服器憑證時,應用程式可能會要求加密和啟用 TrustServerCertificate。 不過,如果用戶端設定中未啟用 TrustServerCertificate,則仍需要佈建的伺服器憑證。

OLE DB Driver for SQL Server 19 版在與 API 相關的加密中引進了重大變更。 如需詳細資訊,請參閱加密屬性變更

主要版本 19

下表描述加密設定的評估:

強制通訊協定加密用戶端設定 資料的連接字串/連接屬性加密/使用加密 產生的加密
0 否/選擇性 選擇性
0 是/強制 (預設) 強制性
0 Strict Strict
1 否/選擇性 強制性
1 是/強制 (預設) 強制性
1 Strict Strict
2 忽略 Strict

下表描述產生的加密和驗證:

加密 信任伺服器憑證用戶端設定 連接字串/連接屬性信任伺服器憑證 結果
選擇性 N/A N/A 加密只會對 LOGIN 封包進行。
強制性 0 忽略 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。
強制性 1 無 (預設值) 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。
強制性 1 加密一定會發生,但是可能會使用自行簽署的伺服器憑證。
Strict N/A N/A 只有當有可驗證的伺服器憑證時才會發生加密,否則連線嘗試會失敗。

警告

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

注意

從 OLE DB 驅動程式 19.2 版開始,TDS 8.0 連線可設定為使用 TLS 1.3。 如需詳細資訊,請參閱 TLS 1.3 支援

主要版本 18 與新的驗證方法

在 18.x.x 版中,為了在使用新驗證存取權杖連接字串關鍵字 (或它們的對應屬性) 時改善安全性,驅動程式會將預設加密值設定為 yes 加以覆寫。 在資料來源物件初始化時會發生覆寫。 如果透過任何方式在初始化之前設定加密,則會遵守值,且不會覆寫。

注意

在 ADO 應用程式中,以及在透過 IDataInitialize::GetDataSource 取得 IDBInitialize 介面的應用程式中,實作介面的核心元件會將加密明確地設定為其 no 預設值。 因此,新的驗證屬性/關鍵字會遵守此設定,而加密值不會遭到覆寫。 因此,建議這些應用程式明確地設定 Use Encryption for Data=true 以覆寫預設值。

為提升安全性,新的驗證方法會遵守 TrustServerCertificate 設定 (及其對應的連接字串關鍵字/屬性),而不管用戶端加密設定。 因此,預設會驗證伺服器憑證。 驅動程式會判斷是否要驗證伺服器憑證,如下所示:

信任伺服器憑證用戶端設定 連接字串/連接屬性信任伺服器憑證 憑證驗證
0 無 (預設值)
0 .是
1 無 (預設值)
1

下表描述加密設定的評估:

強制通訊協定加密用戶端設定 資料的連接字串/連接屬性加密/使用加密 產生的加密
0 無 (預設值)
0 .是
1 無 (預設值)
1 Yes

下表描述產生的加密和驗證:

產生的加密 憑證驗證 結果
No 加密只會對 LOGIN 封包進行。
No Yes 只有當有可驗證的伺服器憑證時才會發生 LOGIN 封包的加密,否則連線嘗試會失敗。
所有網路流量的加密一定會發生,但是可能會使用自行簽署的伺服器憑證。
Yes Yes 只有當有可驗證的伺服器憑證時才會發生所有網路流量的加密,否則連線嘗試會失敗。

主要版本 18 與舊版驗證方法

下表描述舊版驗證方法的加密和驗證結果:

強制通訊協定加密用戶端設定 信任伺服器憑證用戶端設定 資料的連接字串/連接屬性加密/使用加密 連接字串/連接屬性信任伺服器憑證 結果
0 N/A 無 (預設值) N/A 加密只會對 LOGIN 封包進行。
0 N/A 無 (預設值) 只有當有可驗證的伺服器憑證時才會發生所有網路流量的加密,否則連線嘗試會失敗。
0 N/A Yes 所有網路流量的加密一定會發生,但是可能會使用自行簽署的伺服器憑證。
1 0 忽略 忽略 只有當有可驗證的伺服器憑證時才會發生所有網路流量的加密,否則連線嘗試會失敗。
1 1 無 (預設值) N/A 所有網路流量的加密一定會發生,但是可能會使用自行簽署的伺服器憑證。
1 1 無 (預設值) 只有當有可驗證的伺服器憑證時才會發生所有網路流量的加密,否則連線嘗試會失敗。
1 1 Yes 所有網路流量的加密一定會發生,但是可能會使用自行簽署的伺服器憑證。

另請參閱

OLE DB Driver for SQL Server 功能
初始化和授權屬性
連接字串關鍵字
主要版本差異
登錄設定