我有一台安装了 SQL Server Express 的 VPS Windows 2008。我想从我的 PC 访问 SQL Server Express 数据库。禁用 Windows 防火墙后,我可以访问它,否则就不能访问。
我使用 Microsoft 的这个批处理来解决问题,但没有任何反应。
@echo ========= SQL Server Ports ===================
@echo Enabling SQLServer default instance port 1433
netsh firewall set portopening TCP 1433 "SQLServer"
@echo Enabling Dedicated Admin Connection port 1434
netsh firewall set portopening TCP 1434 "SQL Admin Connection"
@echo Enabling conventional SQL Server Service Broker port 4022
netsh firewall set portopening TCP 4022 "SQL Service Broker"
@echo Enabling Transact-SQL Debugger/RPC port 135
netsh firewall set portopening TCP 135 "SQL Debugger/RPC"
@echo ========= Analysis Services Ports ==============
@echo Enabling SSAS Default Instance port 2383
netsh firewall set portopening TCP 2383 "Analysis Services"
@echo Enabling SQL Server Browser Service port 2382
netsh firewall set portopening TCP 2382 "SQL Browser"
@echo ========= Misc Applications ==============
@echo Enabling HTTP port 80
netsh firewall set portopening TCP 80 "HTTP"
@echo Enabling SSL port 443
netsh firewall set portopening TCP 443 "SSL"
@echo Enabling port for SQL Server Browser Service's 'Browse' Button
netsh firewall set portopening UDP 1434 "SQL Browser"
@echo Allowing multicast broadcast response on UDP (Browser Service Enumerations OK)
netsh firewall set multicastbroadcastresponse ENABLE
谢谢
答案1
听起来 SQL Server 不是使用默认端口安装的。我记得 SQL Express 曾经这样做过,因为它安装了命名实例,而不是未命名的默认实例。
打开 SQL Server 配置管理器并检查以下设置:
在左侧窗格中展开“SQL Server 网络配置”,然后展开您的实例(可能是 SQLEXPRESS)的“协议”节点:是否启用了 TCP/IP?
右键单击/属性 TCP/IP 节点,选择 IP 地址选项卡;找到与您要连接的网络接口匹配的 IPn 部分(或滚动到任何/所有接口的 IPAll 部分):TCP 动态端口字段中是否有数字?您需要清除此字段,并根据您运行的批处理脚本,将 TCP 端口字段设置为“1433”(无引号)
单击左侧窗格中的“SQL Server 服务”:确认“SQL Server Browser”服务正在运行/自动。如果没有,请将其更改为此项。
在运行批处理脚本之前,您是否检查过它?它打开的端口比我通常为“面向公众”的 SQL Server 打开的端口要多得多——除非您正在运行 IIS 或 Reporting Services,否则 TCP/80 和 TCP/433 是不必要的;除非您希望在紧急情况下能够通过网络访问服务器,否则 TCP/1434 是不必要的;而 TCP/135 是 RPC,我想说您肯定不希望人们能够通过互联网访问它。
如果您所说的 VPS 是指您拥有一个可从远程位置访问的直接连接的面向互联网的服务器,那么您确实需要考虑为其获取 VPN 或 SSH 服务,以便可以启用此访问,同时仍使其中的大部分内容无法通过互联网访问。
答案2
netsh 防火墙设置端口打开 TCP 1433 “SQLServer”
不起作用 - 1433 TCP 是默认实例。您必须对端口进行硬编码,然后使用该端口或为可执行文件打开防火墙(高级防火墙可以做到这一点)(这样它就可以获得所需的一切)。