2009年12月18日 星期五

SQL Server 在 Windows 2008 R2 連線設定(防火牆)

每次灌好新的 SQL Server 常會碰到連不上的情況

錯誤訊息如下

建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: SQL 網路介面, error: 26 - 搜尋指定的伺服器/執行個體時發生錯誤) (.Net SqlClient Data Provider)

按以下步驟處理即可

1.請確認已經透過位於「Microsoft SQL Server 2008」、「組態工具」中的「SQL Server 組態管理員」,將 SQL Server 網路組態中的 TCP/IP 通訊協定予以啟用
2.開啟 SQL Server Management Studio 在「物件總管」窗格中,於要設定的執行個體上,按下滑鼠右鍵,選擇「Facet」指令
3.此時會開啟「檢視 Facet」對話方塊,從右側「Facet(F)」下拉式清單中,選擇「伺服器組態」項目
4. 將「Facet 屬性」中的「RemoteAccessEnabled」設定為 True

以上內容轉載microsoft technet

如果還是有無法連線的情況,請注意防火牆設定,

可以試試看把防火牆關掉,其他台電腦應該就可以連了,這表示防火牆還需要再做設定

開始→控制台→檢查防火牆狀態


允許程式或功能通過 windows 防火牆,如要使用更多更細部的設定可以利用進階設定。


允許其他程式


瀏覽我們要允許的程式


因為我們要允許的程式,是一個windows 服務,所以我們透過以下步驟來了解該服務的執行檔在哪個位置

按開始,鍵入services.msc直接開啟服務管理


我們這次要允許的就是以下兩個服務,缺一不可,對他們使用右鍵→內容


紅框處就是他們執行檔的位置,我的這兩個服務在不同的資料夾





回到瀏覽我們要允許的程式


選擇sqlbrowser.exe


選擇sqlservr.exe


設定完成,可以用其他電腦測試SQL Server 的連線囉


-------------------

參考這篇後有可能會發現netsh firewall這個指令已經不適用了
現在已經改成 netsh advfirewall firewall

對照修改法可參考以下連結

各服務所對應的port

------------------
可用指令設定(已確認適用 2008 R2)

直接在cmd輸入即可進行設定

本次的防火牆設定也可以執行以下兩段

netsh advfirewall firewall add rule name="sqlservr" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL10.AFCSQLSERVER\MSSQL\Binn\sqlservr.exe" enable=yes

netsh advfirewall firewall add rule name="sqlbrowser" dir=in action=allow program="C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes

也就是命令提示字元︰開始→鍵入cmd.exe後執行

如需要開port可以使用以下指令
netsh advfirewall firewall add rule name="SQLServer" dir=in action=allow protocol=TCP localport=1433

netsh advfirewall firewall add rule name="SQL Admin Connection" dir=in action=allow protocol=TCP localport=1434

netsh advfirewall firewall add rule name="SQL Service Broker" dir=in action=allow protocol=TCP localport=4022

netsh advfirewall firewall add rule name="SQL Debugger/RPC" dir=in action=allow protocol=TCP localport=135

netsh advfirewall firewall add rule name="Analysis Services" dir=in action=allow protocol=TCP localport=2383

netsh advfirewall firewall add rule name="SQL Browser" dir=in action=allow protocol=TCP localport=2382

允許各種服務
netsh advfirewall firewall add rule name="fdlauncher" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL10.AFCSQLSERVER\MSSQL\Binn\fdlauncher.exe" enable=yes

netsh advfirewall firewall add rule name="sqlservr" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL10.AFCSQLSERVER\MSSQL\Binn\sqlservr.exe" enable=yes

netsh advfirewall firewall add rule name="SQLAGENT" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL10.AFCSQLSERVER\MSSQL\Binn\SQLAGENT.EXE" enable=yes

netsh advfirewall firewall add rule name="sqlbrowser" dir=in action=allow program="C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes

netsh advfirewall firewall add rule name="sqlwriter" dir=in action=allow program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlwriter.exe" enable=yes

-------------------
以下僅供參考,可略過不看

在測試的過程中

發現一個奇怪的現象

假設A是SERVER,B是CLIENT

現在B停留再SQL Server Management Studio(SSMS)

A的防火牆設定,先把對B的IP的連線開啟(允許192.168.2.69)的任何連線

此時B已經可以連線到A的SQL SERVER了

再將A的防火牆,把剛剛B的IP連線規則關閉,再允許 SQL SERVER 程式通過防火牆

注意,這時候,B的 SSMS 仍然可以連線

但若關掉對 SQL SERVER程式允許,會馬上影響B的SQL的連線
或是將B的 SSMS 重開後,就無法連線了

感覺 SSMS 暫存了一開始的B電腦IP連線規則,關掉SSMS後就消失

沒有留言:

張貼留言