我最近受邀为一位朋友查看一些 SQL Server,并进行一些配置和安全审计。
有几台服务器属于同一个应用程序组,这让我很感兴趣,因为它们存在许多不一致之处,而且通常设置的配置选项很奇怪。
有一件事引起了我的兴趣:在动态默认端口(即 tcp 端口 1433)上配置的命名实例。SQL 浏览器正在运行,但客户端使用 , 连接。
我对此的想法是,这是完全错误的。我的意思是,为什么要创建一个命名实例只是为了将它放在默认端口上,为什么要使该端口动态化?
我联系了供应商,他们非常自信地告诉我他们的文档和安装指南指出实例应该在动态端口 1433 上命名和配置(“如你所知,这是连接期望 SQL Server 监听和更改此端口的默认端口将使您的客户与我们的支持合同无效……”)
我现在无法给自己一个回复。我的一部分觉得这不值得争论,因为我这样做真的是为了帮个忙。
为了达到这一点,我的问题有两个方面:
什么时候在默认端口上操作命名实例有用,为什么它们是动态的才有意义?
什么时候在默认端口上操作命名实例有用?
我想不出一个,Microsoft 也不建议这样做。当您通过防火墙连接到命名实例时,建议数据库引擎侦听特定端口,以便可以在防火墙中打开适当的端口。那应该不是 1433。使用动态端口并不能保证 SQL Server 将始终侦听您指定的端口。如果其他一些进程已经在使用该端口,动态端口将被设置为零并分配另一个端口。
当命名实例侦听端口 1433 时会发生什么?
如果有人想为 SQL Server 命名实例使用一个特定的端口号,他们应该参考这个并选择一个没有在这里列出的数字。为 SQL Server 默认实例列出了 1433。
为什么让他们充满活力会有意义?
我只是在胡乱猜测。如果他们安装默认实例 1433 将被该实例使用,因此动态端口设置将选择其他端口。
参考:
https://support.microsoft.com/en-us/help/823938/how-to-configure-sql-server-to-listen-on-a-specific-port
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml