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

Windows Server 2008 R2 安裝 SQL Server 2005/2008 無法連線完整排查指南

     編輯:關於SqlServer

前言

Windows Server 2008 R2 內建防火牆預設啟用、SQL Server 2005/2008 安裝後預設僅啟用 Shared Memory 協定、TCP/IP 連接埠可能非 1433、具名執行個體需 SQL Server Browser 服務等因素,常導致「無法連接到伺服器、錯誤 40/53/26」等連線失敗。本文系統整理從服務、協定、防火牆、連線字串、驗證模式到用戶端驅動的完整排查流程。

一、核心服務檢查(最基礎)

  1. 開啟 services.msc,確認下列服務狀態為 執行中、啟動類型為 自動:
  • SQL Server (MSSQLSERVER / SQLEXPRESS):資料庫引擎核心。
  • SQL Server Browser:解析具名執行個體連接埠(UDP 1434),具名執行個體必須啟用。
  • SQL Server Agent:作業排程(非連線必需,但建議啟用)。
  • SQL Server VSS Writer:備份整合(非連線必需)。

常見問題:SQL Server Browser 服務登入帳號權限不足(需本地系統或具網路權限的網域帳號),導致無法回應 UDP 1434 查詢。

二、網路協定配置

  1. 開啟 SQL Server Configuration Manager → SQL Server 網路設定 → 選取執行個體。
  2. Shared Memory:啟用(本機連線最快,預設啟用)。
  3. Named Pipes:建議啟用(部分舊版應用程式/ODBC 驅動預設使用)。
  4. TCP/IP:必須啟用(遠程連線核心)。雙擊進入屬性:
  • IP Addresses 索引標籤 → 捲動至 IPAll:
TCP Dynamic Ports: [清空]
TCP Port: 1433  (預設執行個體)
或
TCP Port: [自訂靜態連接埠,如 8099]  (具名執行個體建議固定)
  • 每個 IP1~IPn(對應伺服器各網卡 IP)同樣設定 TCP Port = 1433、Enabled = Yes。

重大陷阱:具名執行個體(SQLEXPRESS)若將 TCP Port 強制設為 1433,可能與預設執行個體衝突導致服務無法啟動(錯誤:The request failed or the service did not respond in a timely fashion)。解決:具名執行個體固定使用非 1433 靜態連接埠(如 8099),並開放防火牆、連線字串指定該連接埠。

三、Windows 防火牆規則(Server 2008 R2 關鍵)

  1. 控制台 → Windows 防火牆 → 進階設定 → 輸入規則 → 新增規則。
  2. 規則類型:**連接埠** → **TCP** → **特定本機連接埠**:
    1433** (預設執行個體)
    8099** (具名執行個體固定連接埠)
    1434** (UDP,SQL Server Browser,具名執行個體必須)
  3. 動作:**允許連線**。
  4. 設定檔:**網域、私人、公用** 全勾選(視網路位置)。
  5. 名稱:SQL Server TCP 1433、SQL Server TCP 8099、SQL Server Browser UDP 1434。

進階:限制遠端 IP** 於規則「範圍」頁籤設定「遠端 IP 位址」為應用程式伺服器/管理工作站 IP,提升安全性。

四、SQL Server 伺服器屬性設定

  1. SSMS 連線本地 → 伺服器右鍵 屬性 → 連接:勾選 允許遠程連接到此伺服器。
  2. 安全性 頁籤:伺服器驗證 選 SQL Server 和 Windows 驗證模式(混合模式),否則無法使用 sa/自建 SQL 登入連線。
  3. 點擊確定 → 必須重新啟動 SQL Server 服務 才生效。

五、登入與使用者設定

  1. SSMS → 安全性 → 登入 → sa 右鍵 屬性:
  • 一般:設定強密碼、取消勾選「強制執行密碼原則/到期」(視政策)。
  • 狀態:登入 選 啟用。
  1. 建立應用程式專用 SQL 登入:對應目標資料庫使用者,授予 db_datareader、db_datawriter、EXECUTE 權限,避免使用 sa。

六、連線字串正確撰寫(關鍵細節)

執行個體類型正確連線字串範例關鍵點
預設執行個體 (MSSQLSERVER)Server=192.168.1.100,1433;Database=MyDB;User ID=app_user;Password=xxx;Encrypt=True;TrustServerCertificate=True;IP,連接埠格式;預設 1433 可省略連接埠
具名執行個體 (SQLEXPRESS)Server=192.168.1.100\SQLEXPRESS;Database=MyDB;User ID=app_user;Password=xxx;Encrypt=True;TrustServerCertificate=True;反斜線分隔執行個體名;需 SQL Browser + UDP 1434
具名執行個體固定連接埠Server=192.168.1.100,8099;Database=MyDB;User ID=app_user;Password=xxx;Encrypt=True;TrustServerCertificate=True;直接指定連接埠,不依賴 SQL Browser,最穩定
本機連線 (Shared Memory)Server=.;Database=MyDB;Trusted_Connection=True;點號代表本機;Windows 整合驗證
本機具名執行個體Server=.\SQLEXPRESS;Database=MyDB;Trusted_Connection=True;本機具名執行個體

常見錯誤

  • Server=.\SQLEXPRESS 在 C# 字串中需寫 Server=.\\SQLEXPRESS 或 Server=@".\SQLEXPRESS"(反斜線跳脫)。
  • 使用 Data Source 而非 Server 同義,但 Server 較短。
  • Encrypt=True;TrustServerCertificate=True;:SQL Server 2008+ 預設支援加密;若伺服器無有效憑證,客戶端需設 TrustServerCertificate=True 否則會報「憑證鏈不受信任」。

七、用戶端驅動程式版本

  • SQL Server 2005/2008:需安裝 Microsoft SQL Server Native Client 10.0/11.0 (sqlncli.msi) 或 Microsoft ODBC Driver 11/13/17/18 for SQL Server。
  • 舊版 MDAC / SQLOLEDB 不支援新加密協定、新資料型別(date/time/datetime2/geography 等)。
  • 應用程式連線字串指定 Provider=SQLNCLI11 或 Driver={ODBC Driver 17 for SQL Server}。

八、完整排查清單(由簡入繁)

  1. 本機 SSMS 連線測試:. 或 .\SQLEXPRESS,Windows 驗證。成功 → 服務、資料庫正常;失敗 → 檢查服務、錯誤日誌。
  2. 本機 sqlcmd 測試 TCP:sqlcmd -S 127.0.0.1,1433 -U sa -P xxx -Q "SELECT 1"。成功 → TCP 協定、連接埠、防火牆本機回環正常;失敗 → 檢查 Configuration Manager TCP/IP、防火牆輸入規則。
  3. 遠端 Telnet/portqry 測試連接埠:
    telnet 192.168.1.100 1433
    portqry -n 192.168.1.100 -p TCP -e 1433
    portqry -n 192.168.1.100 -p UDP -e 1434(具名執行個體)。
    通聯失敗 → 防火牆、網路隔離、雲端安全群組、VPN 路由。
  4. 遠端 SSMS / sqlcmd 測試:使用 IP,Port 或 IP\InstanceName。失敗 → 檢查連線字串、驗證模式、登入啟用、用戶端驅動。
  5. 檢查 SQL Server 錯誤日誌:MSSQL\Log\ERRORLOG 搜尋 "Login failed"、"Error: 18456"、"Error: 40"、"Error: 53",依錯誤碼精準定位:
  • 18456 State 5:登入不存在(sa 未啟用/拼錯)。
  • 18456 State 8:密碼錯誤。
  • 18456 State 11/12:伺服器驗證模式不匹配(僅 Windows 模式卻用 SQL 登入)。
  • 40 / 53 / 26:網路/執行個體名稱/連接埠不可達(防火牆、SQL Browser、TCP/IP 未啟用、IP 錯誤)。

九、特殊情境:SQL Server 2005 Express 於 Server 2008 R2

  • SQL Server 2005 **主流支援已結束**,建議升級至 2008 R2 SP3 / 2012 SP4 / 2019。
  • 若必須使用 2005:安裝前需啟用 .NET Framework 3.5 功能(Server Manager → 功能)。
  • 安裝時選擇 自訂安裝,取消勾選「SQL Server Browser」若僅單一執行個體,但建議保留。
  • 安裝完成後 **立即安裝 SP4 (KB2463332)** 並套用最新累積更新。
  • 啟用 TCP/IP 協定、固定連接埠、防火牆規則、混合驗證、sa 啟用,按本文流程逐項驗證。

十、自動化驗證腳本

@echo off
set SERVER=192.168.1.100
set PORT=1433
set INSTANCE=SQLEXPRESS
set USER=app_user
set PASS=xxx

echo 1. Telnet Port...
telnet %SERVER% %PORT%

echo 2. sqlcmd IP,Port...
sqlcmd -S %SERVER%,%PORT% -U %USER% -P %PASS% -Q "SELECT @@VERSION, DB_NAME()"

echo 3. sqlcmd Named Instance...
sqlcmd -S %SERVER%\%INSTANCE% -U %USER% -P %PASS% -Q "SELECT @@VERSION"

echo 4. PortQry UDP 1434...
portqry -n %SERVER% -p UDP -e 1434

pause

結語

Windows Server 2008 R2 上安裝 SQL Server 2005/2008 連線失敗,**90% 以上集中在:TCP/IP 協定未啟用/連接埠未固定、防火牆未開放 1433/1434/自訂連接埠、SQL Server Browser 服務未啟動、驗證模式非混合模式、連線字串格式錯誤**。依照本文「服務 → 協定 → 防火牆 → 伺服器屬性 → 登入 → 連線字串 → 用戶端驅動」的標準化排查順序,配合錯誤日誌狀態碼判讀,可在最短時間內定位並解決問題。對於生產環境,建議以 **固定連接埠 + IP,Port 連線字串** 替代具名執行個體名稱,移除對 SQL Browser 的依賴,大幅提升連線穩定性與安全性。

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