共用方式為


連結的伺服器 (Database Engine)

適用於:SQL ServerAzure SQL 受控執行個體

連結的伺服器讓 SQL Server 資料庫引擎和 Azure SQL 受控執行個體能夠從遠端資料來源讀取資料,並針對 SQL Server 執行個體外部的遠端資料庫伺服器 (例如 OLE DB 資料來源) 執行命令。 一般來說,連結的伺服器會設定為讓資料庫引擎能夠執行 Transact-SQL 陳述式,以包含另一個 SQL Server 執行個體或另一個資料庫產品 (例如 Oracle) 中的資料表。 許多類型的 OLE DB 資料來源可以設定為連結的伺服器,包括協力廠商資料庫提供者和 Azure Cosmos DB。

注意

連結的伺服器適用於 SQL Server 和 Azure SQL 受控執行個體 (有限制式)。 Azure SQL Database 中無法使用連結的伺服器。

何時使用連結的伺服器?

連結的伺服器可讓您實作分散式資料庫,其可擷取及更新其他資料庫中的資料。 連結的伺服器在下列情況中是很好的解決方案:您需要實作資料庫分區化,而不需建立自訂應用程式程式碼或從遠端資料來源直接載入。 連結伺服器可提供以下優點:

  • 從 SQL Server 外部存取資料的能力。

  • 在企業間的異質資料來源上發出分散式查詢、更新、命令與交易的能力。

  • 以類似方式處理不同資料來源的能力。

您可以使用 SQL Server Management Studio 或使用 sp_addlinkedserver 陳述式,來設定連結的伺服器。 OLE DB 提供者的必要參數類型和數目有極大的不同。 例如,部分提供者需要您使用 sp_addlinkedsrvlogin 提供連線的資訊安全內容。 部分 OLE DB 提供者允許 SQL Server 更新 OLE DB 來源上的資料。 其他提供者則只提供唯讀資料存取。 如需有關每個 OLE DB 提供者的詳細資訊,請參閱該 OLE DB 提供者的文件。

連結伺服器元件

連結伺服器定義會指定下列物件:

  • OLE DB 提供者

  • OLE DB 資料來源

「OLE DB 提供者」是一種 DLL,可管理特定資料來源並與其互動。 「OLE DB 資料來源」則識別可透過 OLE DB 存取的特定資料庫。 雖然透過連結伺服器定義來查詢的資料來源通常都是資料庫,不過,各種檔案及檔案格式都有 OLE DB 提供者的存在。 其中包括文字檔、工作表資料,以及全文檢索內容搜尋的結果。

從 SQL Server 2019 (15.x) 開始,Microsoft OLE DB Driver for SQL Server (PROGID: MSOLEDBSQL) 即為預設的 OLE DB 提供者。 在較舊版本中,SQL Server Native Client (PROGID:SQLNCLI11) 是預設的 OLE DB 提供者。

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client OLE DB 提供者 (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的開發。 請切換至新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 以繼續使用。

只有使用 32 位元的 Microsoft.JET.OLEDB.4.0 OLE DB 提供者時,Microsoft 才支援連結至 Microsoft Access 和 Excel 來源的伺服器。

注意

SQL Server 分散式查詢是專為處理任何實作必要 OLE DB 介面的 OLE DB 提供者而設計。 不過,SQL Server 已針對預設的 OLE DB 提供者進行測試。

連結伺服器詳細資料

下圖說明連結伺服器組態的基本設定。

顯示用戶端層、伺服器層和資料庫伺服器層的圖表。

連結伺服器通常用於處理分散式查詢。 當用戶端應用程式透過連結伺服器來執行分散式查詢時,SQL Server 會剖析命令,並將要求傳送至 OLE DB。 資料列集要求可能是採用對提供者執行查詢的形式,也可能是開啟提供者的基底資料表 (Base Table)。

若要讓資料來源透過連結伺服器來傳回資料,該資料來源的 OLE DB 提供者 (DLL) 必須與 SQL Server 的執行個體位在同一部伺服器上。

使用完整委派時,連結的伺服器支援 Active Directory 傳遞驗證。 從 SQL Server 2017 (14.x) CU17 開始,也支援具有限制委派的傳遞驗證:不過,不支援 以資源為基礎的限制委派

重要

當使用 OLE DB 提供者時,用來執行 SQL Server 服務的帳戶,必須要有該提供者安裝位置之目錄及其所有子目錄的讀取和執行權限。 這包括 Microsoft 發行的提供者,以及任何第三方提供者。

管理提供者

有一組選項可用來控制 SQL Server 如何載入及使用登錄中所指定的 OLE DB 提供者。

管理連結伺服器定義

當您設定連結的伺服器時,請使用 SQL Server 來註冊連線資訊與資料來源資訊。 註冊完成之後,就可以使用單一邏輯名稱來參考這個資料來源。

您可以使用預存程序及目錄檢視來管理連結伺服器定義:

  • 執行 sp_addlinkedserver來建立連結伺服器定義。

  • 針對 sys.servers 系統目錄檢視來執行查詢,以檢視在特定 SQL Server 執行個體中定義的連結伺服器相關資訊。

  • 藉由執行 sp_dropserver來刪除連結伺服器的定義。 您也可以使用這個預存程序來移除遠端伺服器。

您也可以使用 SQL Server Management Studio 定義連結的伺服器。 在物件總管中,以滑鼠右鍵按一下 [伺服器物件],選取 [新增],然後選取 [連結伺服器]。 您可以用滑鼠右鍵按一下連結伺服器名稱,並選取 [刪除],以刪除連結伺服器定義。

當您對連結伺服器執行分散式查詢時,所要查詢的每個資料來源均需包含完整的四部分資料表名稱。 這個四部分名稱的格式應該是 <linked_server_name>.<catalog>.<schema>.<object_name>

暫存對象的參考一律會解析為適用的本機實例 tempdb ,即使前面加上連結的伺服器名稱也一樣。

連結的伺服器可以定義為指回 (回送,Loopback) 到定義它們的伺服器上。 回送伺服器最適合用於測試針對單一伺服器網路使用分散式查詢的應用程式。 回送連結的伺服器適用於測試,且不支援許多作業,例如分散式交易。

具有 Azure SQL 受控執行個體的連結伺服器

Azure SQL 受控執行個體連結伺服器支援 SQL 驗證和 Microsoft Entra ID (之前的 Azure Active Directory) 驗證。

若要使用 Azure SQL 受控執行個體 上的 SQL Agent 作業透過連結的伺服器查詢遠端伺服器,請使用 sp_addlinkedsrvlogin 從本機伺服器上的登入建立對應到遠端伺服器上的登入。 當 SQL Agent 作業透過連結的伺服器連線到遠端伺服器時,它會在遠端登入的內容中執行 T-SQL 查詢。 如需詳細資訊,請參閱 Azure SQL 受控執行個體的 Azure SQL Agent

Microsoft Entra 驗證

支援的 Microsoft Entra 驗證模式有兩種:受控識別和傳遞。 受控識別驗證可用來允許本機登入,以便查詢遠端連結伺服器。 傳遞驗證允許可使用本機執行個體進行驗證的主體,透過連結的伺服器存取遠端執行個體。

若要在 Azure SQL 受控執行個體 中使用連結的伺服器的 Microsoft Entra 傳遞驗證,您需要下列必要條件:

  • 遠端伺服器上的登入會新增相同的主體。
  • 這兩個執行個體都是 SQL 信任群組的成員

注意

為通過模式設定的連結伺服器現有定義支援 Microsoft Entra 驗證。 唯一的需求是將 SQL 受控執行個體新增至伺服器信任群組

下列限制適用於 Azure SQL 受控執行個體中連結伺服器的 Microsoft Entra 驗證:

  • 不同 Microsoft Entra 租用戶中的 SQL 受控執行個體不支援 Microsoft Entra 驗證。
  • 只有 OLE DB 驅動程式 18.2.1 版和更新版本才支援連結的伺服器的 Microsoft Entra 驗證。

SQL Server 2025 和 MSOLEDBSQL 第 19 版

自 SQL Server 2025(17.x)起,MSOLEDBSQL 提供者預設使用 Microsoft OLE DB 驅動程式 19。 此更新的驅動程式引入了重要的安全性增強功能,包括對 TDS 8.0TLS 1.3 的支援。

TDS 8.0 透過新增加密選項來改善安全性,並引進重大變更:參數 Encryption 不再是選用的。 以另一個 SQL Server 執行個體為目標時,必須在連接字串中設定它。

注意

若沒有Encrypt參數,SQL Server 2025(17.x)中的連結伺服器將預設為Encrypt=Mandatory,並且需要持有有效的憑證。 沒有有效憑證的連線會失敗。

參數 Encryption 提供三個不同的設定:

  • Yes、或 True,或 Mandatory
  • No、或 False,或 Optional
  • Strict

選項 Strict 會強制使用 TDS 8.0,而且需要伺服器證書來進行安全連線。 針對Yes/True/Mandatory,預期必須是受信任的憑證。 您無法使用自我簽署憑證。

OLE DB 版本 加密參數 可能的值 預設值
OLE DB 18 隨意的 TrueMandatoryFalseNo No
OLE DB 19 Required NoFalseYesMandatoryStrict (新) Yes

TrustServerCertificate支持 參數,但不建議使用。 將 信任伺服器憑證 設定為 Yes 停用憑證驗證,從而削弱加密連線的安全性。 若要使用 信任伺服器憑證, 用戶端也必須在電腦登錄中啟用它。 如需啟用 信任伺服器憑證的相關資訊,請參閱 登錄設定。 不建議將設定用於 TrustServerCertificate=Yes 生產環境。

使用 Encrypt=FalseEncrypt=Optional

  • 不需要證書。
  • 如果提供授信憑證,則不會驗證它。
  • 不提供任何連線加密。

使用 Encrypt=TrueEncrypt=Mandatory 不使用 TrustServerCertificate=Yes時:

  • 需要有效的 CA 簽署憑證。
  • 憑證必須符合伺服器的 FQDN。
  • 如果憑證中的替代名稱與 SQL Server 主機名稱不同, HostNameInCertificate 則必須設定為 FQDN。
  • 憑證必須安裝在用戶端電腦上的 受信任根憑證授權單位 存放區中。

使用 Encrypt=Strict時:

  • 強制執行 TDS 8.0。
  • 需要具有 FQDN 相符的有效 CA 簽署憑證。
  • HostNameInCertificate 必須設定為 FQDN。
  • 憑證必須受到用戶端系統的信任。
  • TrustServerCertificate 不支援組態。 這意味著必須存在有效的證書。
信任伺服器憑證用戶端設定 連接字串/連接屬性信任伺服器憑證 憑證驗證
0 No (預設值) 是的
0 Yes 是的
1 No (預設值) 是的
1 Yes

設定連結伺服器連線時,必須在連接字串中正確指定這些設定,以確保與新驅動程式的相容性和安全性。

從舊版 OLEDB 更新

適用於: SQL Server 2025(17.x)及後續版本

當你從先前版本的 SQL Server 遷移到 SQL Server 2025(17.x)並搭配 Microsoft OLE DB Driver 19 時,現有的連結伺服器設定可能會失敗。 除非提供有效的憑證,否則加密參數的不同預設值可能會導致此失敗。

或者,您可以重新建立連結的伺服器,並包含在 Encrypt=Optional 連接字串中。 如果您無法修改連結伺服器設定,請啟用追蹤旗標 17600 以維護 OLE DB 18 行為和預設值。

在 SQL Server Managed Studio (SSMS) 連結伺服器建立精靈中,必須使用 [ 其他資料來源 ] 選項來手動設定連結伺服器加密選項。

如需 OLE DB 19 和加密、憑證和 OLE DB 19 的信任伺服器憑證行為的詳細資訊,請參閱 OLE DB 中的加密和憑證驗證