天天看點

隐藏SSMS和Visual Studio上廣播的SQL Server伺服器名

一、問題描述

在某些情況下,我們可能不希望将重要的SQL Server的伺服器名在一些SQL的工具中廣播出來 (如圖1)。本篇我們将介紹如何從SSMS(SQL Server Management)和Visual Studio中隐藏SQL Server的伺服器名。

隐藏SSMS和Visual Studio上廣播的SQL Server伺服器名

                                                                             (圖1)

二、解決過程及原了解釋

為了實作上述目的,我們首先嘗試了打開SQL Server 配置管理器的”HideInstance”标志,但不起作用。(參考:http://msdn.microsoft.com/cnh-zh/library/ms179327.aspx)   

之後,我們試着關閉SQL Server 浏覽器服務(SQL browser)來隐藏伺服器名,但仍舊沒有作用。

于是,我們做了許多測試來查找伺服器名的來源,最後終于可以重制這個問題的症狀。經過研究,我們發現,這些工具如SSMS是通過兩種機制來擷取伺服器名的:

一種是通過監聽UDP 1434端口(即,基于SSRP的機制)。這種機制會發送包括SQL Server版本的全部資料給用戶端。第二種機制是通過詢問域裡的Master Browser服務然後擷取一個清單。這種方式隻有伺服器名而不包含版本或執行個體名的資訊。擷取之後清單會被排序并合并,顯示在SSMS中。

在我們的問題中,由于我們的SQL Server浏覽器被關閉了,擷取伺服器名采用的是第二種機制。更具體地說,第二種機制是通過調用NetServerEnum函數來進行的。(NetServerEnum函數能夠列出對域可見的某種指定類型的所有伺服器。關于NetServerEnum函數的詳細說明,請參考:http://msdn.microsoft.com/en-us/library/aa370623(VS.85).aspx)

當在一台伺服器上安裝了SQL Server,伺服器首先會将自己标志為SQL Server,然後通知Master Browser。Master Browser将會緩存該資訊。當NetServerEnum函數從清單中請求時,Master Browser将會傳回該資訊。

我發現一開始之是以不能重制這個現象,是因為在我的域中,所有的Computer Browser服務都被禁用了。是以,SSMS得不到第二個清單,而隻能通過SQL浏覽器使用基于SSRP的機制。

我在虛拟伺服器上建立了一個域,并打開了Computer Browser服務,進而得以重制這個問題。在咨詢了我們的AD和Network工作組之後,得知Master Browser的這種行為就是這樣設計的,我們并不能從Master Browser的緩存中過濾SQL Server的伺服器名。

隐藏伺服器名的唯一做法,是通過Group Policy(組政策),将域中所有機器的Computer Browser服務關閉,并在要隐藏的SQL伺服器上打開”HideInstance”标志。

然而,如果您有機器是在Workgroup而不是在域中,那麼您将不能使用Group Policy,而隻能手動停止這些機器上的Computer Browser服務了。這是因為,如果您有開啟着Computer Browser的機器,那麼他們中的一台将會被選作Master Browser并自動緩存伺服器名清單。

另外請注意,禁用Computer Browser服務可能會有一些副作用,因為有些應用程式(比如,Symantec Antivirus software)可能需要使用該浏覽器服務。在服務被禁用時,它們也許不能正常運作。是以您需要檢查如果禁用您環境中的所有Computer Browser服務是否可行。

三、執行步驟

下面是通過Group Policy禁用Computer Browser服務的步驟:

1.  確定您正在編輯的是“Default Domain Policy(預設域政策)”

2.  展開Computer Configuration –> Windows Settings -> Security Settings -> System Services -> 在右邊的面闆中,找到Computer Browser服務,輕按兩下,設定這個政策,然後将其開啟類型設定為Disable(禁用)。

3.  儲存所有設定,退出。

4.  運作“gprpdate/force”應用新政策。

繼續閱讀