建議一:先部署數據庫,再部署防火牆
導致客戶端無法連接上數據庫服務器的原因有很多,而防火牆的限制無疑也是其中的一種。為了降低故障排除的復雜程度,筆者建議數據庫管理員在部署的時候,最好先把防火牆關掉。即先部署數據庫,然後再部署防火牆。或者說,在防火牆存在的情況下,如果發現客戶端無法正常連接到數據庫,最好先把防火牆關掉,然後再看看能夠正常連接。這主要可以幫助數據庫管理員簡單的來判斷,這個連接故障是不是因為防火牆的不恰當配置所造成的。在排除防火牆配置錯誤的時候,這個方法非常的有用。如果確實是因為防火牆的原因,而數據庫管理員還一直在數據庫管理系統或者客戶端那邊尋找原因,那就是白花力氣。同理,如果確實是數據庫服務器的問題而不是防火牆的配置所造成的連接故障,但是數據庫管理員卻是在尋找防火牆的麻煩,那也是自討苦吃。所以筆者建議大家,在部署數據庫的時候(不僅限於SQL Server數據庫系統),最好先把已經存在的防火牆關閉掉。等到客戶端能夠正常連接到服務器後,再嘗試啟動防火牆。
建議二:根據數據庫開啟的服務來開啟防火牆的端口
從安全上來說,數據庫服務器的端口開啟的越少越好。但是數據庫的有些服務必須要開啟某些特定的端口,否則的話某些服務就會受到影響。為此從安全與性能上綜合考慮的話,就要求數據庫管理員根據數據庫要采用的服務來開啟防火牆的端口。
如在SQL Server數據庫中啟用了復制功能的話,就需要在防火牆上開啟1433端口(這是數據庫默認的給復制服務啟用的端口)。當然數據庫管理員也可以跟網絡管理員商量最終所采用的端口。另外如果采用復制快照,則進行WEB同步或者FTP訪問則要求在防後牆上打開其他需要的端口。如快照復制通過FTP實現的話,為了將數據文件和架構從一個位置傳輸到網絡上的另外一個位置,則需要在防火牆上開啟21端口,以允許FTP協議的數據通過這個端口。而通常情況下,為了安全起見是把這個端口關閉的。而如果在復制功能中如果需要用到HTTP或者文件和打印共享服務時,還需要打開137、138、139端口,等等。否則的話由於防火牆的阻擋這些服務將無法正常使用。
另外SQL Server數據庫中有些服務的話是沒有指定端口的。數據庫管理員可以根據實際需要,來確定所需要采用的端口。如數據庫的鏡像服務,其沒有指定所需要采用的端口,而是要求數據庫管理員來選擇端口。此時數據庫管理員就可以根據服務器端口的實際采用情況來設置到底開啟哪個端口為好。在配置的時候,如果數據庫服務器中還部署有其他英勇的話,就需要避免與其他服務端口的沖突。
SQL Server數據庫的相關服務有很多,如還有報表服務、Browser服務(用於偵聽指向命名實例的傳入連接,並為客戶端提供與此命名實例對應的TCP端口號)等等。若數據庫管理員以為客戶端的連接故障是由於防火牆所引起的,那麼數據庫管理員就需要查看微軟的官方文檔,看看對應服務所需要開啟的端口在防火牆中是否已經打開。
建議三:管理好動態端口
以上這些服務的端口基本上是靜態的,只需要在防火牆上把這些端口打開即可,沒有多大的難度。而其管理的難點是有些服務采用的是動態的端口,這會給數據庫服務器上防火牆的配置帶來一定的麻煩。因為端口不固定,所以有時候防火牆就無法適從了。
如通常情況下,數據庫中有一個叫做命名實例的服務,這個服務采用的就是動態端口。也就是說,每次啟動數據庫服務器的時候,數據庫引擎都將確定一個服務器沒有使用的端口作為自己的端口。即每次采用的端口都不一致。默認情況下,SQL Server數據庫引擎采用的TCP端口號為1433。但是如果在這台數據庫服務器上還部署有其他的數據庫引擎,如Oracle數據庫系統或者MySQL數據庫系統,則可能這個1433端口已經被他們所采用了。則此時SQL Server數據庫系統引擎將無法使用這個端口。此時數據庫引擎就會另外選擇一個可用的端口。可見由於數據庫引擎或者數據庫服務器在每次啟動的時候所采用的端口都可能不同,為此很難在防火牆上啟用對正確端口的訪問(防火牆不會跟數據庫引擎互動)。也就是說,防火牆不會去偵測數據庫引擎到底啟用哪些端口。所以如果在數據庫服務器上配置了防火牆,則在數據庫部署的時候,如果某些服務采用了動態端口,則數據庫管理員需要把他們配置為固定端口或者靜態端口,以保證數據庫引擎每次都采用同一的端口號。
在SQL Server數據庫中把動態端口設置為固定端口,其難度不是很大。只是如果啟用的服務比較多的話,工作量可不算小。
下面筆者就談談如何通過企業管理器來設置固定端口。
第一步:打開TCP/IP屬性對話框。在數據庫配置管理中,打開網絡配置選項,然後單擊要配置的服務器實例。此時在右面窗口中會顯示相關的內容。管理員需要找到TCP/IP這項內容,並雙擊它,以打開TCP/IP屬性對話框。
第二步:設置可用的端口號。在TCP/IP屬性對話框中,找到TCP端口頁簽。在這個頁簽中就是當前SQL Server數據庫所采用的端口號。數據庫管理員需要在這個地方把需要采用的端口信息加入到這個頁簽中。那麼操作系統在分配端口的時候,會把這個端口信息預留給數據庫系統。注意數據庫管理員手工數據的端口最好能夠采取後面一些的端口號,如此的話發生端口沖突的幾率就會少許多。
第三步:關聯相關的服務。設置好端口後,此時還沒有關聯到具體的服務。數據庫管理員還必須把新設置的端口與數據庫的服務關聯起來。此時就需要單擊SQL Server服務。找到相關的服務後選擇重新啟動。當數據庫引擎重新啟動時,就會將新的端口給這個服務所使用。以後每次數據庫引擎重新啟動之後,這個服務都將采用這個端口。為此在防護牆上只需要把這個端口打開即可。
所以說對於動態端口來說,防火牆配置有一定的難度。此時最理想的方式就是把數據庫服務所采用的動態端口改為靜態端口或者固定端口。上面筆者介紹得就是把數據庫服務的動態端口改為靜態端口的基本步驟。各位數據庫管理員可以嘗試利用這種方法試試看。
建議四:出現連接故障時的排錯步驟
如果在數據庫服務器上部署了防火牆,此時如果客戶端發生無法連接到服務器的現象,那麼此時最佳的排錯步驟是什麼呢?如何才能夠在最短時間內找到問題的原因呢?為此,筆者有如下這個建議。
首先,數據庫管理員必須先保證服務器與客戶端之間網絡的連通性。數據庫管理員可以利用ping命令或者求助網絡管理員,來判斷服務器與客戶端之間的連接是否有問題。有則改之,沒有的話則進行下面一個步驟。
第二,把防火牆先禁用掉。如果服務器與客戶端之間的網絡連通沒有問題,那麼此時數據庫管理員就需要判斷是防火牆的問題還是數據庫服務器本身的問題。要判斷這個故障的起點,最簡單的方法就是把防火牆禁用掉。如果防火牆禁用後,客戶端訪問服務器正常了,那麼就說明是防火牆在作怪;而過此時故障還依舊,那麼就是數據庫本身的問題了。不過此時也先不要急著把防火牆啟用起來。等到故障修復後再重新啟用防火牆為好。這麼處理就是讓數據庫環境盡量的簡單,以加速排錯的過程。
第三,如果是防火牆的問難,那麼就先查看SQL Server數據庫所需要采用的端口,並在防火牆中全部打開。因為有些服務的話可能需要很多個端口;而某些服務又會引用其他的服務,而這被引用的服務也需要新的端口。為此及時是數據庫專家也很難一下子說清楚某個服務到底需要哪些端口。為此就把用到的端口先一一打開,然後再逐漸的關閉。從而可以確定某個服務需要引用哪些服務、采用哪些端口。