Azure托管.NET站点突发故障,请求排查根源及解决方案
错误信息
[Win32Exception (0x80004005): 访问被拒绝]
[SqlException (0x80131904): 在建立与SQL Server的连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确,并且SQL Server已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到SQL Server的连接)]
HomePage.btn_Search_Click(Object sender, EventArgs e) +1526
<Page_Load>d__2.MoveNext() +745
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action) +114
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
System.Web.Util.WithinCancellableCallbackTaskAwaiter.GetResult() +33
System.Web.UI.d__246.MoveNext() +492
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +32
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
System.Web.Util.WithinCancellableCallbackTaskAwaiter.GetResult() +33
System.Web.UI.d__523.MoveNext() +6951
问题定位
1. Azure端可能诱因
- App Service连接字符串配置错误(如服务器名、凭证输错)或变更后未生效
- 出站网络限制(VNet集成的NSG规则、App Service防火墙)阻断了SQL连接
- 托管身份权限被撤销,导致无法访问SQL数据库
2. SQL Server端可能诱因
- SQL服务停止运行或实例处于不可用状态
- 防火墙规则变更,未允许App Service的IP范围或Azure服务访问
- Named Pipes协议未启用(错误日志明确指向该协议连接失败)
- 数据库登录账户被锁定、密码过期,或被撤销了数据库访问权限
解决方法
SQL Server端排查与修复
- 确认服务状态:
- 若使用Azure SQL数据库,登录Azure门户查看数据库实例状态是否为“在线”
- 若使用Azure VM上的SQL Server,远程登录VM,打开
SQL Server配置管理器确认SQL Server服务处于运行状态
- 检查防火墙规则:
- Azure SQL:在门户中进入SQL数据库的“防火墙和虚拟网络”设置,确认已添加App Service的出站IP,或启用“允许Azure服务和资源访问此服务器”选项
- SQL VM:检查VM的网络安全组(NSG)是否开放1433端口(TCP)和Named Pipes默认端口(445),同时在SQL配置管理器中确保远程连接已启用
- 启用Named Pipes协议:
在SQL配置管理器中,展开“SQL Server网络配置”,选中对应实例的“协议”,右键启用“Named Pipes”,重启SQL Server服务 - 验证账户权限:
登录SQL Server,检查连接字符串中的账户是否拥有目标数据库的db_datareader/db_datawriter权限,确认账户未被锁定、密码未过期
Azure App Service端排查与修复
- 核对连接字符串:
在App Service的“配置”→“连接字符串”中,确认服务器名称、实例名、用户名、密码完全正确,避免特殊字符转义错误 - 检查托管身份配置:
若使用系统/用户托管身份连接SQL,确认身份已被添加到SQL数据库的db_owner或对应权限角色中 - 验证网络连通性:
若App Service使用VNet集成,检查VNet到SQL实例的路由是否正常,NSG规则未阻挡相关端口 - 重启App Service:
临时重启App Service,确保配置变更生效,排除临时进程异常导致的连接问题
内容的提问来源于stack exchange,提问作者Rachna

