2009-08-15 143 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