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

解決 SQL Server 拒絕遠端連線:服務、協定、防火牆、Browser 三步驟完整排查手冊

     編輯:關於SqlServer

全新安裝的 SQL Server 預設關閉遠端連線,嘗試從其他機器連線時常見錯誤:錯誤 40 - 無法開啟與 SQL Server 的連線 / 命名管道提供者: 找不到網路路徑。本文提供系統化三階段排查清單:服務啟動 → 遠端連線/協定啟用 → 防火牆例外/Browser 服務,涵蓋 SQL Server 2005 至 2022 所有版本。

階段一:確認核心服務已啟動

  1. SQL Server (MSSQLSERVER / 具名實例) 服務狀態 = 正在執行,啟動類型 = 自動。
    路徑:SQL Server Configuration Manager (SSCM) → SQL Server 服務。
  2. SQL Server Browser 服務狀態 = 正在執行,啟動類型 = 自動 (具名實例/動態埠必須)。

常見啟動失敗原因:VIA 協定已啟用導致衝突 → SSCM → SQL Server 網路設定 → 實例協定 → 停用 VIA → 重啟服務。

階段二:啟用遠端連線與網路協定

方法 A:SQL Server 組態管理員 (SSCM) —— 推薦、通用

  1. SSCM → SQL Server 網路設定 → MSSQLSERVER 的通訊協定 (或具名實例)。
  2. TCP/IP:右鍵「啟用」→ 屬性 → IP Addresses 分頁 → IPAll 區段:TCP 動態連接埠 清空,TCP 連接埠 設為 1433 (預設實例) 或固定埠。
    具名實例建議固定埠,避免動態埠變動導致連線失敗。
  3. Named Pipes:右鍵「啟用」 (內網/域環境常用,穿透防火牆較 TCP 複雜)。
  4. 重啟 SQL Server 服務生效。

方法 B:SQL Server 外部應用組態工具 (舊版 GUI,2005/2008/R2/2012)

  1. 開始 → 所有程式 → Microsoft SQL Server → 組態工具 → SQL Server 外部應用組態工具
  2. 「服務與連線的外部應用組態工具」→ 展開「資料庫引擎」→「遠端連線」→ 選 使用 TCP/IP 和具名管道的本機和遠端連線 → 套用 → 重啟服務。

階段三:Windows 防火牆例外規則 (關鍵且常被遺漏)

1. 為 SQL Server 引擎建立輸入規則

; 使用 netsh 指令碼部署 (可納入自動化安裝腳本)
netsh advfirewall firewall add rule name="SQL Server (TCP 1433)" dir=in action=allow protocol=TCP localport=1433 profile=DOMAIN,PRIVATE
netsh advfirewall firewall add rule name="SQL Server (Named Pipes)" dir=in action=allow protocol=TCP localport=445 profile=DOMAIN,PRIVATE

或 GUI:控制台 → Windows Defender 防火牆 → 進階設定 → 輸入規則 → 新增規則 → 連接埠 → TCP 1433。

具名實例:另需開放固定 TCP 埠 + UDP 1434 (Browser 服務回應埠)。

2. 為 SQL Server Browser 建立輸入規則


netsh advfirewall firewall add rule name="SQL Server Browser (UDP 1434)" dir=in action=allow protocol=UDP localport=1434 profile=DOMAIN,PRIVATE

3. 程式路徑例外 (替代埠例外,適用動態埠)


; sqlservr.exe 路徑含實例 ID (MSSQL13.MSSQLSERVER 等)
netsh advfirewall firewall add rule name="SQL Server Program" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" profile=DOMAIN,PRIVATE

netsh advfirewall firewall add rule name="SQL Browser Program" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" profile=DOMAIN,PRIVATE

驗證連線

  1. 本機:sqlcmd -S . -E / sqlcmd -S localhost -E → 成功。
  2. 遠端:sqlcmd -S -U user -P pwd / sqlcmd -S \Instance -U user -P pwd → 成功。
  3. Telnet 測試埠通達:telnet 1433 / Test-NetConnection -ComputerName -Port 1433 (PowerShell)。

進階排查清單 (上述均通仍失敗)

檢查項目指令/工具預期結果
SPN 註冊 (Kerberos)setspn -L <service_account>含 MSSQLSvc/FQDN:port, MSSQLSvc/NetBIOS:port
TCP/IP 連線池耗盡netstat -an | findstr 1433無大量 TIME_WAIT
用戶端驅動程式版本ODBC/ADO.NET 版本支援 TLS 1.2、SN
加密強制/憑證SSCM → 通訊協定 → Flags → ForceEncryption若啟用,需有效憑證
端點權限sys.server_permissions / sys.endpoints連線帳戶有 CONNECT 權限

遵循「服務 → 協定 → 防火牆 → Browser」四步驟,95% 遠端連線問題可在 10 分鐘內解決。將上述 netsh 指令碼納入自動化部署流程,可徹底杜絕環境差異導致的連線故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved