1047:無法連接到 SQL Server 實例 [Servername\Instance]
症狀
當您嘗試連接到遠端的 BarTender 系統資料庫時,可能會收到以下錯誤訊息:
#1047: 無法連接到 SQL-Server 實例 [Servername\Instance]。
適用對象
BarTender 2019 及之後版本
診斷
- 在用戶端電腦上也安裝 SQL Server Management Studio。
- 使用與系統資料庫精靈相同的使用者憑證,從 SQL Management Studio 連接到中央 SQL Server 實例。
如果連線失敗,這可能表示 SQL Server 設定不正確。
解決方法
在採取以下任何解決方法前,請務必先與您的 IT 部門或資料庫管理員討論。
設定必要的權限
- 如果您打算使用 SQL Server 帳號,請在伺服器端啟用混合驗證模式:
- 在 SQL Server Management Studio > 物件總管,右鍵點選伺服器,然後點選 內容。
- 在「安全性」頁面,於伺服器驗證下方選擇新的伺服器驗證模式,然後點選 確定
- 為用於連接 BarTender 系統資料庫的帳號設定權限。更多設定帳號權限的資訊,請參考這篇文章:設定系統資料庫權限(影片 - 5:45)
- 確認是要使用 Windows 帳號還是 SQL Server 帳號連線(建議使用 SQL Server 帳號)。
- 如果問題仍然存在,請嘗試以下設定建議:
如果系統資料庫已在電腦 A 上設定,且從電腦 B 連接遠端系統資料庫時(EA 版本,使用 SQL Express)出現問題,請參考下列建議來排除問題。
- 連接遠端 SQL Server 實例時,建議直接使用 IP 位址及連接埠(通常為 1433),而非使用命名實例。
- 如果仍需使用命名實例,SQL Server 需要先進行一些設定(請見下方說明)。
啟用 SQL Server 實例的遠端連線
- 開啟 SQL Management Studio。
- 在左側窗格中右鍵點選伺服器名稱,選擇 內容,然後點選 連線,確認已勾選 允許遠端連線到此伺服器,如下圖所示。
設定 SQL Express 伺服器使用固定連接埠
- 開啟 SQL Server Configuration Manager,並在左側點選 SQL Server Services。
- 利用「處理程序 ID」欄(中間)來查詢每個執行中服務的 PID。找到 SQL Server 對應的 PID,並在命令提示字元輸入以下指令查詢該 PID 正在監聽的連接埠:
netstat -ano | find /i “[SQL Server 的 PID 號碼]"
根據上圖資訊,語法如下:netstat -ano | find /i “668”
- 查詢結果如下:
- 如果第 3 步查無結果,表示 TCP/IP 通訊協定尚未啟用,需先啟用。在 SQL Server Configuration Manager 左側點選 SQL Server Network Configuration,右鍵點選 TCP/IP 通訊協定,選擇 啟用。
- 重新啟動 SQL Server 服務,並查詢 SQL 服務的新處理程序 ID。
- 在命令提示字元執行以下指令:
netstat -ano | find /i “23444”
- 查詢結果如下:
- 在 SQL Server Configuration Manager 左側點選 SQL Server Network Configuration,右鍵點選 TCP/IP 通訊協定。
- 進入 內容 > IP 位址,往下捲動到 IPAll 區段。請將 TCP 動態連接埠 的值清空(不要輸入 0)。
- 在 TCP 連接埠 輸入 1433。點選 套用,再點選 確定。
- 重新啟動 SQL Server 服務,查詢 SQL 服務的新處理程序 ID,並在命令提示字元執行以下指令:
netstat -ano | find /i “5088”
- 查詢結果如下:
此時,SQL Express 已設定為監聽標準連接埠 1433。
啟動 SQL Server Browser 服務
- 開啟 SQL Server Configuration Manager,左側點選 SQL Server Services。右鍵點選 SQL Server Browser 服務,選擇 內容。
- 切換到「服務」分頁,將啟動模式改為 自動。點選 套用 及 確定。
- 點選 啟動 按鈕以啟動 SQL Browser 服務。
- 確認 SQL Server Browser 服務已經啟動,如下圖所示。
根據 SQL Server 強化安全性的最佳實踐,建議將 SQL Server Browser 服務停用。此服務會將 SQL Server 資源的請求導向正確的連接埠。移除這個轉導器可降低攻擊風險,有助於隱藏 SQL Server 元件的正確入口。
設定防火牆允許 SQL Server 相關網路流量
在 Windows 防火牆 中必須設定四個例外規則,才能允許 SQL Server 存取:
- 為 TCP 連接埠 1433 設定連接埠例外。在 新增傳入規則精靈 對話框中,請依下列方式建立連接埠例外:
- 選擇 連接埠。
- 選擇 TCP 並指定連接埠 1433。
- 允許連線。
- 選擇三種設定檔(網域、私人、公開)。
- 將規則命名為 SQL – TCP 1433。
- 為 UDP 連接埠 1434 設定連接埠例外。再次點選 新增規則,並依下列方式建立另一個連接埠例外:
- 選擇 連接埠。
- 選擇 UDP 並指定連接埠 1434。
- 允許連線。
- 選擇三種設定檔(網域、私人、公開)。
- 將規則命名為 SQL – UDP 1434。
- 為 sqlservr.exe 設定程式例外。再次點選 新增規則,並依下列方式建立程式例外:
- 選擇 程式。
- 點選 瀏覽,選擇 sqlservr.exe,路徑為: C:\Program Files\Microsoft SQL Server\MSSQL11.[INSTANCE_NAME]\MSSQL\Binn\sqlservr.exe ,其中 [INSTANCE_NAME] 為您的 SQL 實例名稱。
- 允許連線。
- 選擇三種設定檔(網域、私人、公開)。
- 將規則命名為 SQL – sqlservr.exe。
- 為 sqlbrowser.exe 設定程式例外。再次點選新增規則,並依下列方式建立另一個程式例外:
- 選擇 程式。
- 點選 瀏覽,選擇 sqlbrowser.exe,路徑為:C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe。
- 允許連線。
- 選擇三種設定檔(網域、私人、公開)。
- 將規則命名為 SQL – sqlbrowser.exe。
如上所示,若要透過 SQL Server 的實例名稱進行遠端連線,可能需要進行許多設定(此外也有安全性疑慮)。因此,建議直接使用 IP 位址及連接埠。