Azure App Service连接Azure SQL VM时遇访问拒绝错误求助
解决Azure App Service连接Azure SQL VM的网络访问问题
以下是逐步排查和解决的步骤:
1. 检查SQL VM的网络安全组(NSG)入站规则
- 登录Azure门户,找到SQL VM对应的NSG
- 添加或修改入站规则,允许TCP协议、目标端口为SQL Server使用的端口(默认1433,自定义端口请替换),源选择App Service的出站IP地址列表(可在App Service的「属性」页面查看)
- 若后续配置VNet集成,可将源改为SQL VM所在VNet的地址段,提升安全性
2. 确认SQL Server的远程连接配置
- 登录到Azure SQL VM的操作系统,打开「SQL Server配置管理器」
- 展开「SQL Server网络配置」,找到对应实例的「协议」,确保TCP/IP协议已启用
- 双击TCP/IP协议,切换到「IP地址」标签,拉到最底部的「IPAll」部分,确认「TCP端口」与连接字符串中的端口一致
- 重启SQL Server服务(在「SQL Server服务」面板中操作)使配置生效
3. 配置App Service的网络连通性
- 若SQL VM部署在Azure VNet或企业内网中,建议为App Service配置VNet集成:
- 进入App Service的「网络」->「VNet集成」页面
- 选择SQL VM所在的VNet(需同区域或已配置VNet对等连接),完成集成后App Service可通过内网IP访问SQL VM
- 检查App Service的「网络」->「出站流量限制」,确保没有阻止到SQL VM IP和端口的规则
4. 验证连接字符串正确性
- 在App Service的「配置」->「连接字符串」中,确认格式符合要求:
Server=tcp:<SQL_VM_IP>,<Port>;Initial Catalog=<数据库名称>;User ID=<SQL账号>;Password=<密码>;Encrypt=True;TrustServerCertificate=False;- 若已配置VNet集成,将
<SQL_VM_IP>替换为SQL VM的内网IP - 确认账号、密码、数据库名称与本地SSMS使用的完全一致,无拼写错误
- 若已配置VNet集成,将
5. 检查SQL VM的本地防火墙规则
- 在SQL VM的操作系统中,打开「Windows Defender防火墙」->「高级设置」
- 添加入站规则,允许SQL Server端口(1433或自定义端口)的TCP连接,源范围设置为App Service的出站IP或VNet地址段
6. 测试端口连通性
- 进入App Service的「开发工具」->「控制台」,执行以下命令测试端口连通性:
Test-NetConnection <SQL_VM_IP> -Port <Port>- 若返回「TcpTestSucceeded: True」,说明网络连通;若失败,回到NSG和本地防火墙规则排查
- 若网络连通但仍报错,重点检查SQL Server的登录权限
7. 确认SQL Server登录权限
- 用本地SSMS连接SQL Server,找到对应的登录账号:
- 右键账号选择「属性」,在「服务器角色」中确认拥有必要权限(如db_owner或自定义权限)
- 切换到「用户映射」标签,确认已映射到目标数据库并分配了权限
- 检查SQL Server的「服务器属性」->「安全性」,确认已启用「SQL Server和Windows身份验证模式」(若使用SQL账号登录)
内容的提问来源于stack exchange,提问作者varnsy
相关产品推荐
相关产品推荐

