SQL Server的端口号

Geo*_*ge2 11 sql sql-server sql-server-2008

我想知道SQL Server数据库引擎使用了哪些端口?我需要这样的端口号来编写配置脚本,以授予对安装有SQL Server的计算机的特定端口的访问权限,以使其安全.一个相关的问题是SQL Server数据库引擎是使用一个静态端口号来为所有客户端请求提供服务,还是为每个请求使用一个端口?

顺便说一句:我的背景是SQL Server 2008企业.

乔治,提前谢谢

Mar*_*ett 10

默认情况下,默认实例将侦听tcp/1433.它也可能监听命名管道(tcp/445) - 但我认为这些天必须明确启用.

命名实例(如SQLEXPRESS)侦听动态端口.动态端口由客户端通过SQL Server解析协议(又名SQL浏览器)解析 - 它侦听udp/1434 1.此动态端口在首次启动时选择,并且通常在将来重新启动(存储在注册表中)时保持不变 - 但如果存在争用,SQL将选择新端口.

您可以(通常应该)将生产SQL Server的所有实例配置为使用静态端口.这使得防火墙变得更加容易.

1您必须将命名实例放入连接字符串的唯一原因是客户端知道要求SSRP提供动态端口.如果它是静态或其他已知端口,您只需将客户端指向Server=server.com:port,而不是实例名称.


Jar*_*ore 5

一种非常简单和编程的方法是只查询sys.dm_exec_connections中的local_tcp_port列:

select local_tcp_port from sys.dm_exec_connections where local_tcp_port is not null
Run Code Online (Sandbox Code Playgroud)

如果没有返回结果,那么可能是因为服务器在这台机器上并且没有来自其他机器的连接,所以没有tcp连接.

在这种情况下,如果您使用sqlcmd进行查询,则只需将"tcp:"放在服务器名称前面,例如

sqlcmd -E -S tcp:(local)
Run Code Online (Sandbox Code Playgroud)

或者如果您正在连接SqlClient,那么您可以添加"Network Library = dbmssocn"来强制tcp,例如

string connStr = "Server=(local); Integrated Security=true; Network Library=dbmssocn";
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 4

1433 是 SQL Server 默认使用的。至少从 SQL Server 6.0 开始就是这样。

一般来说,出于安全原因,您不想向全世界开放。人们应该通过应用程序/Web 服务访问您的数据库。通过管道的直接 SQL Server 连接充满了安全风险。

所有会话都将使用此端口(网站的端口 80),但您可以使用 SQL Server 配置工具更改它,如下所述