我有一台安装了 SQL Server 2008 R2 Enterprise 的 Windows Server 2008 R2 计算机。SQL Server 设置为命名实例,因此其全名为“ATLANTA3\FOO”(“Atlanta3”为计算机名称,“Foo”为实例名称)。
我已经设置了具有高级安全规则的 Windows 防火墙,以允许所有到 sqlservr.exe 的传入连接,这是在配置管理器中设置的内容:
Shared Memory: Enabled
TCP/IP: Enabled
Protocol:
Enabled: Yes
Keep Alive: 30000
Listen All: Yes
IP Addresses:
(Most of these are IPv6 addresses assigned to tunnel adapters and are ignored)
IP2:
Active: Yes
Enabled: Yes
IP Address 192.168.0.17 // this is the internal LAN adapter
TCP Dynamic Ports: 0
TCP Port: (blank)
IP4:
Active: Yes
Enabled: Yes
IP Address 89.xx.xx.xx // this is the Internet-exposed adapter. I can ping this from home.
TCP Dynamic Ports: 0
TCP Port: (blank)
IPAll:
TCP Dynamic Ports: 49280
我使用 TCPView 查看实例正在监听的端口 (49280),并且可以完美地打开 telnet 连接。
但是我似乎无法从任何远程计算机(无论是内部 192.168.0.x LAN 还是 Internet)连接到该实例。我从 SSMS 收到此错误:
标题:连接到服务器
无法连接到 ATLANTA3\FOO。
附加信息:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:26 - 错误定位指定的服务器/实例)(Microsoft SQL Server,错误:-1)
我已遵循 TechNet 和 MSDN 文章中的所有说明,允许 SQL Server 通过防火墙。这听起来像是 SQL Server Browser 的问题,但我找不到任何有关如何让 SSB 与防火墙良好配合的信息(假设它需要这样做)。
我无法直接禁用防火墙,因为当我这样做时,服务器会断开与所有网络的连接,并且无法远程响应,我必须让数据中心的人员手动帮我重启机器(不好)。
答案1
您的防火墙是否打开了 UDP 1434?这是 SQL Browser 所用的端口。将 SQL Browser 视为 SQL 实例名称的 DNS。它将实例名称解析为端口号。