首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 跨實例存取完整指南:連結伺服器實戰與帳號映射

     編輯:關於SqlServer

業務場景

在 Instance01 中直接查詢、寫入 Instance02 的資料,例如跨實例資料遷移:

INSERT INTO Instance01.DB01.dbo.Table01
SELECT * FROM Instance02.DB01.dbo.Table01;

預設情況下 SQL Server 禁止跨實例存取,需透過 連結伺服器 機制實現。

核心預存程序:sp_addlinkedserver

sp_addlinkedserver 
    [ @server= ] 'server'           -- 連結伺服器別名
    [ , [ @srvproduct= ] 'product_name' ]  -- 產品名稱
    [ , [ @provider= ] 'provider_name' ]   -- OLE DB 提供者
    [ , [ @datasrc= ] 'data_source' ]      -- 資料來源(IP/主機名)
    [ , [ @location= ] 'location' ]        -- 位置
    [ , [ @provstr= ] 'provider_string' ]  -- 連接字串
    [ , [ @catalog= ] 'catalog' ]          -- 預設目錄/資料庫

最簡建立範例(同網域、整合驗證)

-- 在 Instance01 執行
EXEC sp_addlinkedserver 'Instance02';  -- 僅指定別名,預設 SQL Server Native Client
GO
-- 此後即可使用四段式名稱存取
SELECT * FROM Instance02.DB01.dbo.Table01;

跨網域/不同帳號:帳號映射 sp_addlinkedsrvlogin

當兩實例無共同網域帳號,需建立登入映射:

方式一:使用目前登入的安全性內容(整合驗證)

EXEC sp_addlinkedsrvlogin 'Instance02', 'true';
-- 含義:目前登入 Instance01 的 Windows 帳號直接用於連線 Instance02

方式二:指定遠端登入帳號(SQL 驗證映射)

EXEC sp_addlinkedsrvlogin 
    'Instance02',           -- 連結伺服器名
    'false',                -- 不使用自對應
    'TJVictor',             -- 本地登入帳號
    'sa',                   -- 遠端對應帳號
    'Password1';            -- 遠端密碼
-- 含義:當本地用戶 TJVictor 登入 Instance01 存取 Instance02 時,以 sa/Password1 身分連線

完整部署檢查清單

  1. 在來源實例執行 sp_addlinkedserver 註冊目標實例
  2. 視驗證模式執行 sp_addlinkedsrvlogin 建立映射
  3. 測試四段式查詢:SELECT * FROM [LinkedSrv].[DB].[schema].[Table]
  4. 若失敗,檢查 DNS 解析:ping Instance02 或在 hosts 檔加入映射,或直接用 IP 建立連結伺服器

常用管理檢視與預存程序

物件用途範例
sp_helpserver列出已註冊連結伺服器EXEC sp_helpserver
sys.servers系統檢視,功能同 sp_helpserverSELECT * FROM sys.servers
sys.linked_logins檢視登入映射SELECT * FROM sys.linked_logins
sp_dropserver移除連結伺服器EXEC sp_dropserver 'Instance02', 'droplogins'
sp_droplinkedsrvlogin移除特定登入映射EXEC sp_droplinkedsrvlogin 'Instance02', 'TJVictor'

安全性最佳實務

  • 避免在 @provstr 明文寫入密碼,優先使用 sp_addlinkedsrvlogin 管理認證
  • 最小權限原則:遠端映射帳號僅授予必要資料庫的 db_datareader/db_datawriter
  • 定期稽核 sys.linked_logins 移除廢棄映射
  • 生產環境啟用 rpc out 選項:EXEC sp_serveroption 'Instance02', 'rpc out', 'true'

疑難排解快速查核

錯誤現象可能原因解決方向
「找不到伺服器」DNS 無法解析連結伺服器名稱用 IP 建立、修改 hosts、檢查網路連通
「登入失敗」映射帳號密碼錯誤或權限不足驗證 sp_addlinkedsrvlogin 參數、遠端授權
「分散式交易失敗」MSDTC 服務未啟動或防火牆阻擋啟動 MSDTC、開放 135/動態埠、設定網路 DTC 存取
效能極差大量資料跨實例 JOIN、缺乏索引拉回本地暫存表處理、使用 OPENQUERY 下推查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved