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

SQL Server 建立連結伺服器標準腳本範本:sp_addlinkedserver、sp_serveroption、sp_addlinkedsrvlogin

     編輯:關於SqlServer

標準化連結伺服器建立流程,確保安全性、效能與可維護性。

三步驟標準腳本

1. 建立連結伺服器 (sp_addlinkedserver)

EXEC sp_addlinkedserver
    @server = 'LINK_PROD_ERP',           -- 連結伺服器名稱 (本地別名)
    @srvproduct = 'SQL Server',          -- 產品名稱 (SQL Server 可省略)
    @provider = 'SQLNCLI11',             -- 提供者:SQLNCLI11 (2012+), SQLNCLI10 (2008/R2), SQLOLEDB (舊版)
    @datasrc = '192.168.10.100',         -- 遠端伺服器 IP/主機名
    @catalog = 'ERP_Database';           -- 預設資料庫 (可選)
GO

2. 設定伺服器選項 (sp_serveroption)

-- 啟用 RPC 遠程預存程序呼叫
EXEC sp_serveroption 'LINK_PROD_ERP', 'rpc out', 'true';
EXEC sp_serveroption 'LINK_PROD_ERP', 'rpc', 'true';

-- 安全性建議
EXEC sp_serveroption 'LINK_PROD_ERP', 'remote proc transaction promotion', 'true'; -- 異動提升
EXEC sp_serveroption 'LINK_PROD_ERP', 'collation compatible', 'false'; -- 定序不強制相容
EXEC sp_serveroption 'LINK_PROD_ERP', 'lazy schema validation', 'true'; -- 延遲結構驗證 (效能)
GO

3. 建立登入映射 (sp_addlinkedsrvlogin)

-- 方案 A: 特定本地登入映射到遠端固定帳號 (最常用)
EXEC sp_addlinkedsrvlogin
    @rmtsrvname = 'LINK_PROD_ERP',
    @useself = 'false',           -- 不使用當前登入上下文
    @locallogin = 'app_user',     -- 本地登入 (NULL 表示所有)
    @rmtuser = 'erp_reader',      -- 遠端登入
    @rmtpassword = 'Str0ngP@ss';  -- 遠端密碼
GO

-- 方案 B: 當前登入自動映射 (需雙方同帳號/信任網域)
-- EXEC sp_addlinkedsrvlogin 'LINK_PROD_ERP', 'true', NULL, NULL, NULL;
GO

提供者選擇指南

SQL Server 版本推薦提供者備註
2019 / 2017 / 2016MSOLEDBSQL (最新)支援 TLS 1.2、Always Encrypted、UTF-8
2014 / 2012SQLNCLI11Native Client 11.0,功能完整
2008 R2 / 2008SQLNCLI10Native Client 10.0
2000 / 2005SQLOLEDB舊版 OLE DB,已棄用
跨版本連 2000MSDASQL + Native Client 10.0 ODBC參考文章 72154

安全性最佳實務

  • 遠端帳號授予 最小權限 (僅 db_datareader / 執行特定預存程序)。
  • 密碼**勿硬編碼**於部署腳本,使用 SQLCMD 變數 / 環境變數 / Key Vault 注入。
  • 定期稽核 sys.linked_logins、sys.servers。
  • 跨網域/不信任網域需啟用 rpc out 並配置 Kerberos 委派 (雙跳驗證)。

驗證查詢

-- 基本連線測試
SELECT * FROM OPENQUERY(LINK_PROD_ERP, 'SELECT @@SERVERNAME, @@VERSION');

-- 四部分命名查詢
SELECT TOP 10 * FROM LINK_PROD_ERP.ERP_Database.dbo.Orders;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved