使用擴充保護連接到 Database Engine

SQL Server 從 SQL Server 2008 R2 開始就支援 [擴充保護]驗證擴充保護是作業系統實作的網路元件功能。Windows 7 和 Windows Server 2008 R2 上可支援 [擴充保護][擴充保護] 會包含在 Microsoft 舊版作業系統的 Service Pack 中。當使用 [擴充保護] 進行連接時,SQL Server 會比較安全。

重要事項重要事項

Windows 預設不會啟用 [擴充保護]。如需有關如何在 Windows 中啟用 [擴充保護] 的詳細資訊,請參閱驗證延伸保護

擴充保護的描述

[擴充保護] 會使用服務繫結與通道繫結來避免驗證轉送攻擊。在驗證轉送攻擊中,可以執行 NTLM 驗證的用戶端 (如 Windows 檔案總管、Microsoft Outlook、.NET SqlClient 應用程式等) 會連接到攻擊者 (如惡意 CIFS 檔案伺服器)。攻擊者會使用用戶端的認證來偽裝成用戶端,並向服務驗證 (例如,Database Engine 服務的執行個體)。

這種攻擊有兩種變化:

  • 在誘惑式攻擊中誘惑用戶端自願連接到攻擊者。

  • 在詐騙攻擊中,用戶端打算連接到有效的服務,但沒有注意到 DNS 和 IP 路由的其中一個或兩者已被侵害,所以連接會重新導向攻擊者。

SQL Server 支援服務繫結與通道繫結,以減少 SQL Server 執行個體上的這些攻擊。

服務繫結

服務繫結位址誘惑式攻擊的方式,是要求用戶端傳送用戶端打算連接之 SQL Server 服務的已簽署服務主要名稱 (SPN)。在驗證回應的過程中,該服務會驗證封包中收到的 SPN 與它自己的 SPN 相符。如果用戶端被誘惑連接到攻擊者,用戶端將會包含攻擊者的已簽署 SPN。攻擊者無法轉送封包來向真正的 SQL Server 服務驗證為用戶端,因為其中包含攻擊者的 SPN。服務繫結會產生單次可忽略的成本,但是並不會處理詐騙攻擊。當用戶端應用程式沒有使用加密來連接到 SQL Server 時,系統就會進行服務繫結。

通道繫結

通道繫結會在用戶端與 SQL Server 服務的執行個體之間建立安全通道 (Schannel)。此服務會驗證用戶端的真實性,其方式是比較該通道特有的用戶端通道繫結 Token (CBT) 與它自己的 CBT。通道繫結會處理誘惑式和詐騙這兩種攻擊。但是,它會發生較大的執行階段成本,因為它需要所有工作階段流量的傳輸層安全性 (TLS) 加密。當用戶端應用程式使用加密來連接到 SQL Server 時,系統就會進行通道繫結。

作業系統支援

設定

有三個 SQL Server 連接設定會影響服務繫結與通道繫結。這些設定可以使用 SQL Server 組態管理員或 WMI 加以設定,而且可以使用原則型式管理中的 [伺服器通訊協定設定] Facet 加以檢視。

  • 強制加密

    可能的值是 [開啟][關閉]。若要使用通道繫結,[強制加密] 必須設定為 [開啟],而所有用戶端將會強制加密。如果設定為 [關閉],則只會保證服務繫結。[強制加密] 位於 SQL Server 組態管理員的 [MSSQLSERVER 的通訊協定屬性] ([旗標] 索引標籤) 上。

  • 擴充保護

    可能的值是 [關閉][允許][必要][擴充保護] 變數可讓使用者設定每一個 SQL Server 執行個體的 [擴充保護] 層級。[擴充保護] 位於 SQL Server 組態管理員中的 [MSSQLSERVER 的通訊協定屬性] ([進階] 索引標籤) 上。

    • 當設定為 [關閉] 時,便會停用 [擴充保護]。SQL Server 的執行個體將會接受來自任何用戶端的連接,不論用戶端是否受到保護。[關閉] 與舊版及未修補的作業系統相容,但是比較不安全。當您知道用戶端作業系統不支援擴充保護時,請使用這個設定。

    • 當設定為 [允許] 時,支援 [擴充保護] 之作業系統的連接便需要 [擴充保護]。如果是不支援 [擴充保護] 之作業系統所做的連接,便會忽略 [擴充保護]。如果未受保護的用戶端應用程式在受保護的用戶端作業系統上執行,則會拒絕來自該應用程式的連接。這個設定要比 [關閉] 安全,但不是最安全的設定。請在某些作業系統支援 [擴充保護] 但某些不支援的混合式環境中使用這個設定。

    • 當設定為 [必要] 時,只會接受來自受保護之作業系統上的受保護應用程式的連接。這個設定最安全,但是不支援 [擴充保護] 之作業系統或應用程式的連接將無法連接到 SQL Server。

  • 接受的 NTLM SPN

    當一個以上的 SPN 知道伺服器時,便需要 [接受的 NTLM SPN] 變數。當用戶端嘗試使用伺服器不知道的有效 SPN 連接到伺服器時,服務繫結將會失敗。若要避免這個問題,使用者可以使用 [接受的 NTLM SPN] 來指定代表伺服器的數個 SPN。[接受的 NTLM SPN] 是以分號分隔的一系列 SPN。例如,若要允許 SPN MSSQLSvc/ HostName1.Contoso.com 和 MSSQLSvc/ HostName2.Contoso.com,請在 [接受的 NTLM SPN] 方塊中輸入 MSSQLSvc/HostName1.Contoso.com;MSSQLSvc/HostName2.Contoso.com。此變數的最大長度為 2,048 個字元。[接受的 NTLM SPN] 位於 SQL Server 組態管理員的 [MSSQLSERVER 的通訊協定屬性] ([進階] 索引標籤) 上。

啟用 Database Engine 的擴充保護

若要使用 [擴充保護],伺服器和用戶端都必須擁有支援 [擴充保護] 的作業系統,而且必須在作業系統上啟用 [擴充保護]。如需有關如何針對作業系統啟用 [擴充保護] 的詳細資訊,請參閱驗證延伸保護

SQL Server 從 SQL Server 2008 R2 開始就支援 [擴充保護]。某些舊版 SQL Server 的未來更新中將可以使用 [擴充保護]。在伺服器電腦上啟用 [擴充保護] 之後,請使用下列步驟來啟用 SQL Server 2008 R2 中的 [擴充保護]

  1. [開始] 功能表上,選擇 [所有程式],指向 [Microsoft SQL Server],然後按一下 [SQL Server 組態管理員]

  2. 展開 [SQL Server 網路組態],並以滑鼠右鍵按一下 [<InstanceName> 的通訊協定],然後按一下 [屬性]

  3. 針對通道繫結和服務繫結,在 [進階] 索引標籤上將 [擴充保護] 設定為適當的設定值。

  4. 當一個以上的 SPN 知道伺服器時,您也可以選擇在 [進階] 索引標籤上設定 [接受的 NTLM SPN] 欄位,如<設定>一節所述。

  5. 如果是通道繫結,請在 [旗標] 索引標籤上將 [強制加密] 設定為 [開啟]

  6. 重新啟動 Database Engine 服務。

設定其他 SQL Server 元件

如需有關如何設定 Reporting Services 的詳細資訊,請參閱<含有 Reporting Services 之驗證的擴充保護>。

當使用 IIS 來透過 HTTP 或 HTTPs 連接存取 Analysis Services 資料時,Analysis Services 可以充分利用 IIS 所提供的擴充保護。如需有關如何設定 IIS 使用擴充保護的詳細資訊,請參閱在 IIS 7.5 中設定擴充保護 (英文)。