2009-08-15 100 views
10

我想知道SQL Server數據庫引擎使用哪些端口?我需要這樣的端口號來編寫配置腳本,以授予對安裝有SQL Server的計算機的特定端口的訪問權限,以確保安全。一個相關的問題是,SQL Server數據庫引擎是使用一個靜態端口號來提供所有客戶端請求還是使用一個端口來處理每個請求?SQL Server的端口號

BTW:我的背景是SQL Server 2008企業版。

由於事先 喬治

回答

4

1433就是SQL Server的默認使用。它至少從SQL Server 6.0開始。

一般來說,出於安全原因,你不想打開這個世界。人們應通過應用程序/ Web服務訪問您的DB 。通過管道的直接SQL Server連接充滿了安全風險。

所有會話都將使用此端口(網站的端口80),但您可以使用描述爲here的SQL Server配置工具對其進行更改。

+0

謝謝,1.你的意思是所有會話將只使用端口1433來處理SQL Server上的所有操作? 2.如果SQL Server配置不同,即使用其他端口,哪裏可以看到更改? – George2 2009-08-15 04:37:18

+0

謝謝,所以打開這個端口應該足以讓ADO.Net應用程序訪問SQL Server 2008數據庫引擎,所有實例都使用相同的端口? – George2 2009-08-15 04:45:30

+1

@George:是的。但請確保你沒有打開到外部網絡! – Eric 2009-08-15 04:47:48

1

:1433是默認。但是,可以更改此端口,如果您正在處理多個實例,則每個端口都會有不同的端口。

一個快速谷歌搜索變成了下面的鏈接:

http://decipherinfosys.wordpress.com/2008/01/02/finding-the-port-number-for-a-particular-sql-server-instance/

...我敢肯定的Technet將有更多的信息。

+1

...... Eric也是這麼說的。 – 2009-08-15 04:49:13

+0

網址無法打開? – George2 2009-08-15 04:58:16

+0

我沒有訪問它的問題,無論是通過點擊或複製粘貼;你看到了什麼錯誤? – 2009-08-15 19:54:10

9

缺省情況下,默認實例將在tcp/1433上偵聽。它也可能聽命名管道(tcp/445) - 但我認爲這必須明確啓用這些天。

命名實例,如SQLEXPRESS,在動態端口上偵聽。動態端口由客戶端通過SQL Server解析協議(又名SQL瀏覽器)來解決 - 它監聽udp/1434 。這個動態端口是在第一次啓動時選擇的,並且通過未來的重新啓動(存儲在註冊表中)通常保持不變 - 但是如果存在爭用,SQL將選擇一個新端口。

您可以並且通常應該將全部生產SQL服務器的實例配置爲使用靜態端口。這使得防火牆更容易

必須將命名實例放入連接字符串中的唯一原因是,客戶端知道要向SSRP請求動態端口。如果它是一個靜態或其他已知端口,則只需將客戶端指向Server=server.com:port,即可取消實例名稱。

+0

感謝Marc,我對你的意思感到困惑 - 「但是如果有爭用,SQL會選擇一個新的端口。」?尤其是什麼意思是有爭議的。你的意思是,如果動態端口被SQL Server以外的其他進程佔用,將選擇一個新的端口? – George2 2009-08-15 06:40:37

+0

我想確認一下,如果我們使用非默認端口號,並且在連接字符串中我們沒有明確指定端口號,SQL Server和客戶端將始終能夠使用SSRP來解析查找要使用的端口號? – George2 2009-08-15 06:42:15

+1

是 - 如果「首選」端口(在第一次運行時選擇)正在使用,SQL將在啓動時選擇一個新端口。是的,只要你允許udp/1434和Sql Server瀏覽器服務正在運行。 http://msdn.microsoft.com/en-us/library/ms181087.aspx – 2009-08-15 07:46:36

1

有時端口不是1433

http://www.php.net/manual/en/function.mssql-connect.php#76256 查找範圍中使用regedit.exe在HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ Microsoft SQL Server的\ SQLEXPRESS \的MSSQLServer \ SuperSocketNetLib \ TCP協議的註冊表。

其中一個nameValue對具有名稱TcpPort和一個值,該值是SQL Server正在偵聽的端口。

4

一個非常簡單的和計劃的方式就是來查詢sys.dm_exec_connections的local_tcp_port柱:

select local_tcp_port from sys.dm_exec_connections where local_tcp_port is not null 

如果沒有返回結果的話,那可能是因爲服務器是這臺機器上,也沒有來自其他機器的連接,所以沒有tcp連接。

在這種情況下,如果您使用的是sqlcmd查詢,那麼只需在服務器名稱前加上「tcp:」,例如:或者如果您使用SqlClient連接,那麼您可以添加「Network Library = dbmssocn」來強制tcp,例如,

string connStr = "Server=(local); Integrated Security=true; Network Library=dbmssocn"; 
+1

偉大的解決方案 - 謝謝你。 – JohnLBevan 2013-02-28 09:57:25