為SQL Server使用非標(biāo)準(zhǔn)的端口
你正在使用標(biāo)準(zhǔn)的端口號1433來連接SQL Server 2005嗎?你考慮過設(shè)置SQL Server來監(jiān)聽一個不同于1433的端口號嗎?我曾經(jīng)就是這樣。在這篇文章里,我將討論我是怎樣做的,以及我在設(shè)置SQL Server 2005去使用一個非標(biāo)準(zhǔn)的端口號時遇到的問題。
使用默認(rèn)端口號的問題 當(dāng)你安裝SQL Server時,默認(rèn)實例是監(jiān)聽1433端口號的。眾所周知,這是默認(rèn)的端口號。因此,通常你會看到來自黑客對1433端口的攻擊。所以為了最小化黑客通過默認(rèn)端口號來訪問的潛在的威脅,你應(yīng)該考慮使用一個不同于1433的非標(biāo)準(zhǔn)的端口號。 當(dāng)安裝一個命名實例后,在它啟動的時候默認(rèn)使用的是動態(tài)決定的端口號。因此,命名實例每次啟動時,都有可能監(jiān)聽不同的端口號。這會有些問題,特別是如果你需要通過防火墻來訪問的話。既然端口號可以動態(tài)變化,那么你就不能使用防火墻規(guī)則來限制用特定端口號訪問你的SQL Server。因此,為了限制對你的SQL Server的訪問,你需要配置SQL Server去監(jiān)聽一個特定的端口。 怎樣配置SQL Server去監(jiān)聽特定的端口 既然默認(rèn)端口號是易受黑客攻擊的,而命名實例又是動態(tài)的設(shè)置端口號,那么你應(yīng)該考慮指定你的每一個SQL Server實例去監(jiān)聽一個特定的端口。SQL Server使用一個特定的端口提供了更安全的環(huán)境。那么怎樣去配置SQL Server 2005使其監(jiān)聽一個不同的端口呢?為了實現(xiàn)這個目標(biāo),SQL Server提供了SQL Server配置管理器工具。 為了啟動配置管理器,單擊開始→程序→Microsoft SQL Server 2005→配置工具→SQL Server 配置管理器。一旦你啟動了SQL Server配置管理器,你就可以打開SQL Server 2005網(wǎng)絡(luò)配置的節(jié)點。你這樣做完后,就會看到類似下面的屏幕: 這里你可以看到我有4個不同的SQL Server實例在運行。一個是默認(rèn)實例,叫做MSSQLSERVER,一個是Express版,叫做SQLEXPRESS,接著我有兩個命名實例,叫做SERVER1和SERVER2。 為了改變這些實例的端口配置,我將單擊一個實例,這樣會在右邊顯示可用的不同協(xié)議。下面是我單擊實例SERVER2時的屏幕快照:
你可以看到我啟動了兩個協(xié)議,“Shared Memory”和“TCP/IP”。為了改變端口設(shè)置,在右邊欄里右擊TCP/IP協(xié)議,然后選擇屬性選項。當(dāng)你做完后,將顯示下面的屏幕快照:
在這個屏幕里,你可以看到“全部監(jiān)聽”設(shè)置為“是”。這意味著該實例將監(jiān)聽所有的IP地址。當(dāng)你安裝SQL Server實例時,監(jiān)聽所有的IP地址是默認(rèn)設(shè)置。如果你想讓SQL Server僅監(jiān)聽一個特定的IP地址的話,那么你需要把“全部監(jiān)聽”設(shè)置改為“否”。 為了指定你想要讓SQL Server監(jiān)聽的特定端口,你需要單擊上面屏幕的“IP地址”標(biāo)簽。當(dāng)你做完后,會顯示類似下面的屏幕:
你可以看到IP1和IP2是禁用的(“已啟用”選項設(shè)置為“否”),在IPALL里的TCP動態(tài)端口設(shè)置為1317。由于SERVER2是命名實例,在實例啟動的時候IP地址是動態(tài)設(shè)置的,端口1317正好是我的命名實例目前使用的端口號。如果我停止該實例并重啟,那么該實例在重啟的時候可能使用一個不同的端口,因為端口號是動態(tài)設(shè)置的。當(dāng)TCP動態(tài)端口選項被設(shè)置為0時,它表示數(shù)據(jù)庫引擎正在監(jiān)聽動態(tài)端口。 為了確保命名實例使用一致的端口號,或者你想要為默認(rèn)實例改變默認(rèn)端口號,你所需要做的就是指定一個特定的端口號來讓你的SQL Server實例去監(jiān)聽,就象下面這樣:
這里我已經(jīng)指定了我想使用的端口8484作為我的命名實例SERVER2的端口號。我只需在TCP端口選項里輸入這個端口號就行了。 當(dāng)使用特定端口設(shè)置時的客戶端連接 客戶端連接到一個使用非標(biāo)準(zhǔn)、依賴于你的安裝設(shè)置的SQL Server實例時,可能會有一些問題,尤其是在你沒有運行SQL Server Browser服務(wù)的時候??蛻舳擞?/font>3種方法連接到一個使用特定非標(biāo)準(zhǔn)端口號的實例。 第一種方法是運行SQL Server Browser服務(wù)。當(dāng)這個服務(wù)運行的時候,它會通知客戶端要求連接的實例正在使用的端口號。這可以避免客戶端在連接一個SQL Server實例時必需知道端口號的情形。如果你想要更安全的環(huán)境,那么你不要運行SQL Server Browser服務(wù)。通過不運行SQL Server Browser服務(wù),客戶端為了連接SQL Server就需要在連接字符串里指定正確的端口號。 第二個方法是在客戶端機器上創(chuàng)建一個SQL Server的別名。通過運行SQL Server配置管理器工具可以在客戶端機器上創(chuàng)建一個別名。在SQL Native Client節(jié)點下,右擊別名然后選擇新建別名。做完后會出現(xiàn)新建別名對話框。在該對話框里,你可以創(chuàng)建一個別名,并指定該別名的實例和端口號。下面這個屏幕快照顯示了我是怎樣為我的指定了使用端口號8484來連接的命名實例SERVER2創(chuàng)建別名的。
注意我已經(jīng)指定了別名為SERVER2,它使用的端口號是8484,并且服務(wù)器選項的值為SERVER2。創(chuàng)建該別名來把別名SERVER2與端口號為8484的服務(wù)器SERVER2相關(guān)聯(lián)。一旦我指定這些信息,我就可以單擊確定按鈕或者單擊應(yīng)用再單擊確定按鈕來創(chuàng)建別名了。 最后一個方法是在連接字符串里通過編程來指定端口號。由于我不是一個連接字符串的大師,所以我不敢保證所有不同的方法都能達到這個目標(biāo),但有一個方法可行,就是在連接字符串里連同服務(wù)器名稱一起指定端口號。這可以通過在服務(wù)器名稱后立即輸入“,<端口號>”來實現(xiàn)。所以對于我上面的例子SERVER2,我將有一個類似下面的連接字符串: Data Source=SERVER2,8484;Initial Catalog=AdventureWorks 注意我已經(jīng)在連接字符串的Data Source參數(shù)里的服務(wù)器名稱的后面添加了“,8484”。 使用非標(biāo)準(zhǔn)端口的問題 我發(fā)現(xiàn)在使用非標(biāo)準(zhǔn)端口或為命名實例指定一個特定端口是沒有什么真正的問題的。我曾經(jīng)遇到過的最大問題是程序員不斷的過來對我說“我不能連接到SQL Server”這一事實。然后當(dāng)我和他們一起診斷連接問題的時候,我們發(fā)現(xiàn)他們在試圖連接的時候忘記了連同服務(wù)器名稱一起指定端口號。因此,如果你計劃使用非標(biāo)準(zhǔn)的端口號,那么你需要確保你清楚地解釋了連接字符串將需要有一個端口號以確保連接能成功。 結(jié)論 正如你所看到的,在用一個特定的端口號來設(shè)置你的SQL Server實例時沒有太多的工作要做。最大的問題就是確保連接字符串的編碼要正確。當(dāng)設(shè)置端口號的時候,要確保該端口號沒有被使用。為了確保你的環(huán)境更加安全,我建議你關(guān)閉SQL Server Browser服務(wù)。這樣所有的客戶端在連接SQL Server的時候都要求指定端口號。 |
|