AWS上ASP.NET应用无法连接SQL Server的排查求助
解决SQL Server TCP连接Error 40的排查步骤
1. 验证SQL Server TCP端口监听状态
在Win Server实例的命令提示符中执行:
netstat -ano | findstr "1433"
确认存在LISTENING状态的条目,且对应PID为MSSQLSERVER服务的PID。若没有,需重启MSSQLSERVER服务,同时检查SQL Server配置管理器:确保TCP/IP设置中,实例私有IP对应的TCP端口设为1433、已启用设为是。
2. 测试Linux实例到SQL Server的网络连通性
在Amazon Linux实例上执行以下命令之一,验证端口可达性:
telnet <SQL_SERVER_PRIVATE_IP> 1433
或
nc -zv <SQL_SERVER_PRIVATE_IP> 1433
若连接失败,排查以下网络规则:
- Win Server防火墙出站规则:确认未限制Linux实例IP的出站流量
- Linux实例EC2安全组出站规则:确保允许到1433端口的出站流量(默认全允许,自定义规则需检查)
- VPC网络ACL:子网关联的ACL需允许SQL Server子网1433端口入站,以及Linux子网临时端口范围的出站响应流量
3. 检查SQL Server Browser服务状态
若使用命名实例(部分AWS SQL AMI默认配置为命名实例),需启动SQL Server Browser服务,并确保Win Server防火墙开放1434端口、EC2安全组允许1434端口入站。
4. 修正连接字符串配置
- 确保使用SQL Server实例的私有IP(而非localhost/127.0.0.1),跨EC2实例通信依赖私有网络
- 补充SSL信任参数,避免自签名证书验证失败:
Server=<PRIVATE_IP>;Database=<DB_NAME>;User Id=<SQL_USER>;Password=<SQL_PWD>;TrustServerCertificate=True;
5. 查看SQL Server错误日志
在SSMS中查看SQL Server日志(管理→SQL Server日志),查找来自Linux实例IP的登录失败记录,确认是否为账号权限、密码错误等问题。必要时启用登录审计,获取更详细的失败原因。
6. 验证DNS解析(若使用主机名)
若连接字符串用主机名,在Linux实例上执行:
nslookup <SQL_SERVER_HOSTNAME>
确认解析结果为SQL Server实例的私有IP,排除DNS解析错误导致的连接失败。
内容的提问来源于stack exchange,提问作者Cameron Bowman
相关产品推荐
相关产品推荐

