SQL Server 2008 远程访问问题

9
我在本地机器上连接Sql Server时遇到了问题。
我已经尝试了一切,但仍然无法连接。
这是我所做的:
1)在Sql Management Studio(SMS)中右键单击Sql Server -> Connections -> 允许远程连接
2)在Sql Management Studio(SMS)中右键单击Sql Server -> Security -> 允许远程连接 -> 将Auth模式设置为Win和Sql auth模式(即混合模式)
3)禁用防火墙
4)Sql Server Configuration Manager -> Network Configuration -> Protocols -> 启用Shared memory、Named pipes、TCP/IP
5)Sql Server Configuration Manager -> Network Configuration -> Protocols -> TCP/IP -> Properties -> 将TCP端口设置为1433,将TCP动态端口设置为0。之后,在“services.msc”中重启MainSql服务
6)在SMS中运行“EXEC xp_readerrorlog 1”,找到以下内容:
Server is listening on [ 'any' 1433]. Server is listening on [ 'any' 1433]. Server local connection provider is ready to accept connection on [ \.\pipe\SQLLocal\MAINSQL ]. Server named pipe provider is ready to accept connection on [ \.\pipe\MSSQL$MAINSQL\sql\query ]. Server is listening on [ ::1 64825]. Server is listening on [ 127.0.0.1 64825]。
7)尝试从我的家庭机器上telnet [myip] 1433。结果:连接到[myip]...无法打开端口1433的主机连接:连接失败
8)尝试从服务器上telnet [myip] 1433 - 这个可行!
看起来像是网络问题。我有另一台安装了Sql Server的服务器,我在它上面做了同样的事情,并且能够从我的家庭机器连接到它,但不能连接到这个服务器!我试图从第二个服务器连接到这个服务器,也没有成功。
请帮帮我,我不知道该怎么办。我已经尽力了,但仍然无法解决问题。
更新: 服务器机器上启动了Sql Server Browser服务。该服务器是托管的专用服务器,我正在尝试从我的家庭机器和另一个位于另一个国家的专用服务器连接到它。

不,服务器不在与家用机器相同的子网中。嗯,我不确定如何解决这类问题。服务器有IIS,我可以与其上的网站进行交互。 - Vladimir
你如何连接到服务器,它在哪个子网上,你又在哪个子网上?你是通过VPN连接的吗?(我认为你可能正在连接错误的地址,基于你可用的地址) - cairnz
我想说的是,由于这些位于不同的托管中心,可能会应用防火墙规则,特别是阻止对 SQL Server 端口的外部访问。如果您可以通过 VPN 连接到要连接到 SQL DB 的托管中心 - 然后尝试连接,如果成功,则问题在于防火墙之间。 - cairnz
所以可能有一个外部防火墙(不在我的服务器上,因为我已经禁用了它),它会阻止某些端口的连接?谢谢你的建议,我会尝试设置VPN,并且还会尝试配置服务器来监听另一个端口。 - Vladimir
它没起作用。我把端口改成了52,但是我无法连接。主机商说他没有阻止任何端口。 - Vladimir
显示剩余2条评论
2个回答

10

问题出在防火墙上。为了解决它,我运行了这里的脚本:http://support.microsoft.com/kb/968872

这真的很奇怪,因为我完全禁用了服务器的防火墙。但是现在它对我有用了,感谢cairnz和Gregory A Beamer的帮助。


1
确实!我也曾经遇到过同样的问题。这不是我的第一次尝试,但是却让我感到困惑。与其运行引用URL中整个脚本的全部内容,我只需要运行这个命令:netsh firewall set portopening TCP 1433 "SQLServer"。在我的情况下,我已经创建了这个规则,或者我以为我已经创建了这个规则。我只需删除我的规则并运行此命令,就可以解决问题了! - Levitikon

2

看起来你遇到了两种最可能的原因之一:你设置了协议。只需仔细检查客户端,确保双方启用了相同的协议,然后就完成了。

第二个最可能的原因是,在 SQL 2005 上,服务器上的浏览器服务已关闭。如果是这样,你通常会遇到远程调用问题,比如 http://support.microsoft.com/kb/914277


在服务器上设置分析器并查看是否尝试了握手。 - Gregory A Beamer
谢谢您的提示。我运行了SQL Profiler,并为“test”登录设置了过滤器。当我从服务器的SQL MS连接到数据库时,Profiler显示了登录操作,但是当我尝试从家庭计算机的SQL MS连接时,它什么也没有显示。有没有办法检查这样的连接问题? - Vladimir
浏览器服务仅在多个实例时才需要。请参阅http://msdn.microsoft.com/en-us/library/ms165724(v=sql.90).aspx。 - cairnz
@cairnz:仅仅是为了什么?那显然是错误的。是的,SSRP在实例方面存在问题,但这不是SQL Browser被创建的唯一原因。SQL Browser还处理远程连接。它默认关闭(在安装时),以更好地保护机器。需要证明吗?请阅读http://support.microsoft.com/kb/914277,特别是其中一行指出要使远程连接工作,“打开SQL Server Browser服务”。而且,是的,我已经有人成功地通过简单地打开SQL Browser来使远程工作。 - Gregory A Beamer
你的回答说“只接受本地调用”,这是错误的。因此,只有在需要将传入的连接请求转换为多个实例时才需要它 - 安全性除外。如果 SQL Server Browser 未运行,则仍会接受默认端口到默认实例的调用 - 参考:“如果 SQL Server Browser 服务未运行,则仍然可以通过提供正确的端口号或命名管道来连接到 SQL Server。例如,如果 TCP/IP 运行在端口 1433 上,则可以连接到 SQL Server 的默认实例。” - cairnz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接