今天早上,我导航到我的网站,看到它在任何存储过程后都崩溃并显示以下消息:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
我在事件查看器中注意到有人试图使用"sa"进行了暴力登录攻击,因此我禁用了远程访问。
从那以后,我不知道发生了什么。现在,无法处理 ASP.Net 页,因为 SQL Server 2008 请求不起作用,并且在尝试执行存储过程时始终返回超时。
可能是什么原因,我应该检查和修复什么?
[编辑3]
通过将连接字符串中的 IP 更改为 127.0.0.1 来解决。在我阻止然后取消阻止从外部 IP 访问 SQL 端口后,一个模糊的防火墙设置仍然阻止外部 IP。
[编辑2]
我直接在SQL中进行了查询,显示的消息是:
A transport-level error has occurred when sending the request to the server.
[编辑]
类似的线程中列出了三种可能性:
1 - 某处出现僵局。
不,因为:
- 所有存储过程现在都回答此错误
- 攻击发生后,没有更改任何代码或程序。
2 - 数据库的统计信息和/或查询计划缓存不正确
我输入了DBCC FREEPROCCACHE,它成功地删除了缓存,没有错误。
我输入了exec sp_updatestats,缓存重置没有改变任何东西。
3 - 查询太复杂,需要调整
与 1 相同。存储过程非常简单/基本。
这个问题的其他答案(我的意思是"在其他线程中",而不是"这里")也应该关注本质:
此错误还可能意味着无法使用当前连接字符串与 SQL Server 通信。非常基本。
就我而言,我的Windows防火墙(像往常一样)没有反映它的实际行为。当受到暴力攻击时,我阻止了对防火墙中SQL端口的访问并重新启动(它没有任何变化)。然后过了一段时间,即使在我删除了这条规则之后,SQL似乎开始拒绝访问来自lan IP的任何IP地址。但我不再考虑防火墙中的这条规则了。无论如何,我想阻止外部访问,之后发现有一个"案例"可以签入SQL管理器来执行此操作。
我所做的是在连接字符串中将我的公共 IP 地址更改为 127.0.0.1。