例如,当使用 SSMS 连接到 SQL Server 时,我会指定要连接的服务器名称以及身份验证方法(在本例中为 Windows 身份验证)。如果 SQL Server 在默认 1433 以外的端口上运行,我会在服务器名称后附加逗号和端口号。
最近,我们有了一台新服务器,我能够在不指定端口号的情况下连接到它,因此我假设它运行的端口号是 1433。但是,我注意到当我运行以下查询时(我是该机器的管理员,但不是 DBA),它显示除了 1433 之外的端口。
选择@@servername 转到 DECLARE @portNumber NVARCHAR(10)
EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
,@key = 'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
,@value_name = 'TcpDynamicPorts'
,@value = @portNumber OUTPUT
SELECT
[Port Number] = @portNumber
GO
假设查询返回端口号为2121,当我使用端口号2121连接时,也成功连接。
问:如果我不指定端口号,尝试会不会失败,因为尝试应该默认为 1433?
我正在尝试弄清楚为什么我们的海外人员由于端口未打开而无法访问。我是否应该请求也打开 1433 或仅打开上述 SQL 返回的 poprt 号码?
答案1
回答有关为什么请求不会失败的具体问题,本地网络上的 SQL 客户端将能够找到动态 SQL 端口,但防火墙外的客户端则不会找到。
SQL 命名实例默认配置有“动态”端口。一旦在服务器上“动态”分配了端口,它将保留该端口,除非在启动 SQL 服务器时该端口正在使用。如果存在此问题,或者希望 SQL 服务器侦听特定端口(例如默认的 1433),则可以设置静态端口。
您可以设置静态端口,也可以将 SQL 管理器返回的端口提供给离岸人员。静态端口意味着以后不可能更改(尽管可能性很小)。
本文介绍如何静态配置端口: