我今天正在Dynamic Ports
与我的一位同事讨论,可以使用一些帮助来澄清他们的工作方式。
第一个问题:如果IPALL
TCP Dynmaic Ports
设置是一个特定的数字(比如 1971),这是否表示您有一个 1971 的静态端口或一个当前为 1971 的动态端口,并且可能会在将来的某个时候发生变化。
第二个问题:这是我最好奇的一个。我们有一个实例,IPALL
TCP Dynmaic Ports
通过数十次实例重启,该实例具有相同的端口(设置中的值)数年。是什么导致实例重启后动态端口实际发生变化?
从历史上看,作为安全最佳实践的一部分,建议不要使用默认端口连接到 SQL Server。在具有单个默认实例的服务器上,默认情况下将使用以下端口:
问题:
我构建了一个在静态端口 50101 上运行的命名实例。
网络人员已打开防火墙上的端口以允许传入连接。我也要求他们打开 UDP 端口 1434,因为我相信 SQL 浏览器服务在此端口上运行,并且需要将命名实例的正确端口传递回请求连接。即使命名实例在静态 TCP 端口上运行。
那是对的吗?
SQL Browser / UDP 1434 不只是用于动态端口,对吧?
如果连接字符串中的端口不是明确的,它需要打开吗?
真的需要结束这场争论!
议员
使用 TSQL,如何确定 MS SQL 服务器(任何版本)是配置为使用静态端口还是使用动态端口?
我正在尝试使用的脚本:
DECLARE @TcpPort VARCHAR(5)
,@RegKey VARCHAR(100)
IF @@SERVICENAME !='MSSQLSERVER'
BEGIN
SET @RegKey = 'SOFTWARE\Microsoft\Microsoft SQL Server\' + @@SERVICENAME + '\MSSQLServer\SuperSocketNetLib\Tcp\IPAll'
END
ELSE
BEGIN
SET @RegKey = 'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER\SUPERSOCKETNETLIB\TCP\IPAll'
END
EXEC master..xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE'
,@key = @RegKey
,@value_name = 'TcpPort'
,@value = @TcpPort OUTPUT
EXEC master..xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE'
,@key = @RegKey
,@value_name = 'TcpDynamicPorts'
,@value = @TcpPort OUTPUT
SELECT @TcpPort AS PortNumber
,@@SERVERNAME AS ServerName
,@@SERVICENAME AS ServiceName
Run Code Online (Sandbox Code Playgroud)