全新安裝的 SQL Server 預設關閉遠端連線,嘗試從其他機器連線時常見錯誤:錯誤 40 - 無法開啟與 SQL Server 的連線 / 命名管道提供者: 找不到網路路徑。本文提供系統化三階段排查清單:服務啟動 → 遠端連線/協定啟用 → 防火牆例外/Browser 服務,涵蓋 SQL Server 2005 至 2022 所有版本。
SQL Server Configuration Manager (SSCM) → SQL Server 服務。常見啟動失敗原因:VIA 協定已啟用導致衝突 → SSCM → SQL Server 網路設定 → 實例協定 → 停用 VIA → 重啟服務。
TCP 動態連接埠 清空,TCP 連接埠 設為 1433 (預設實例) 或固定埠。開始 → 所有程式 → Microsoft SQL Server → 組態工具 → 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 服務回應埠)。
netsh advfirewall firewall add rule name="SQL Server Browser (UDP 1434)" dir=in action=allow protocol=UDP localport=1434 profile=DOMAIN,PRIVATE
; 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
sqlcmd -S . -E / sqlcmd -S localhost -E → 成功。sqlcmd -S -U user -P pwd / sqlcmd -S \Instance -U user -P pwd → 成功。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 指令碼納入自動化部署流程,可徹底杜絕環境差異導致的連線故障。