【问题标题】:port number of SQL Server [duplicate]SQL Server 的端口号 [重复]
【发布时间】:2009-08-15 04:32:10
【问题描述】:

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

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

提前致谢, 乔治

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

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

    命名实例(如 SQLEXPRESS)侦听动态端口。动态端口由客户端通过 SQL Server 解析协议(又名 SQL 浏览器)解析 - 该协议侦听 udp/14341。这个动态端口是在第一次启动时选择的,并且在以后的重新启动时通常会保持不变(存储在注册表中) - 但如果存在争用,SQL 将选择一个新端口。

    您可以并且通常应该将生产 SQL 服务器的所有实例配置为使用静态端口。这使得防火墙更加更容易。

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

    【讨论】:

    • 谢谢 Marc,我对你的意思感到困惑——“但如果存在争用,SQL 将选择一个新端口。”?尤其是存在争执的意思。你的意思是如果动态端口被SQL Server以外的其他进程占用,会选择一个新的端口?
    • 我想和你确认一下,如果我们使用非默认端口号,并且在连接字符串中我们没有明确指定端口号,SQL Server 和客户端将始终能够使用 SSRP 来解析找到要使用的端口号?
    • 是 - 如果“首选”端口(第一次运行时选择)正在使用中,SQL 将在启动时选择一个新端口。是的,只要您允许 udp/1434 并且 Sql Server 浏览器服务正在运行。 msdn.microsoft.com/en-us/library/ms181087.aspx
    • 谢谢马克,1. 我的困惑是动态这个词让我认为每次客户端连接到 SQL Server 时,SQL Server 都会使用新的(动态)端口为客户端提供服务,所以端口号价值很难确定。从您的回复来看,动态端口实际上是固定值(选择一个未使用的值),对吗? 2.我们在SQL Server配置管理器中配置动态端口时,需要指定值0,是否意味着我们仍然无法知道动态端口的“固定”值?
    • 正确 - 它是动态的,因为它是在启动时选择的 - 每个客户端都连接到同一个端口。我相信您可以检查 Config Mgr 以查看服务器运行时的当前值。否则,它会存储在注册表中,并且我认为也会写入 SQL 日志。
    【解决方案2】:

    一种非常简单且程序化的方法是只查询 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:”放在服务器名称前面,例如

    sqlcmd -E -S tcp:(local)
    

    或者如果你用SqlClient连接,那么你可以添加“Network Library=dbmssocn”来强制tcp,例如

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

    【讨论】:

    • 很好的解决方案 - 谢谢。
    【解决方案3】:

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

    一般来说,出于安全原因,您不希望将其公开给全世界。人们应该通过应用程序/网络服务访问您的数据库。通过管道直接连接 SQL Server 充满了安全隐患。

    所有会话都将使用此端口(对于网站来说是端口 80),但您可以使用 SQL Server 配置工具更改它,如 here 所述。

    【讨论】:

    • 谢谢,1. 你的意思是所有会话都将使用端口 1433 只处理 SQL Server 上的所有操作? 2. 如果 SQL Server 配置不同,即使用其他端口,在哪里可以看到变化?
    • 谢谢,所以打开这个端口应该足以让 ADO.Net 应用程序访问 SQL Server 2008 数据库引擎,所有实例都使用同一个端口?
    • @George:是的。但请确保您没有将其打开到外网!
    • @George:是的,是的。连接将总是访问 SQL Server 端口。同样,就像 Apache 或 IIS 的端口 80。
    • @George:是的。我的 SQL 2008 动态端口设置为 1660。转到开始-->Microsoft SQL Server-->配置工具->配置管理器,然后转到 的协议,双击 TCP/IP,然后转到IP 地址选项卡以获得明确的答案。
    【解决方案4】:

    :1433 是 默认值。但是,可以更改此端口,如果您要处理多个实例,每个实例都有不同的端口。

    快速谷歌搜索出现以下链接:

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

    ...我相信 Technet 会提供更多信息。

    【讨论】:

    • 我在访问它时没有问题,无论是通过点击还是复制粘贴;你看到了什么错误?
    【解决方案5】:

    有时端口不是 1433

    来自http://www.php.net/manual/en/function.mssql-connect.php#76256 在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp 中使用 regedit.exe 查看注册表。

    其中一个 nameValue 对具有名称 TcpPort 和一个值,该值是 SQL Server 正在侦听的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 2010-09-14
      • 2018-04-16
      • 2014-02-08
      • 1970-01-01
      • 2016-03-30
      • 2020-11-25
      相关资源
      最近更新 更多