Azure SQL Server跨订阅客户端IP白名单失效的排查求助
Azure SQL Server跨订阅VM连接排查方案
1. 查看SQL Server防火墙拒绝的IP地址
可以通过以下两种方式获取:
- 启用Azure SQL Server的诊断日志,勾选
SQLSecurityAuditEvents和FirewallLogs类别,日志会发送到存储账户、事件中心或Log Analytics。过滤日志中Action为DENY的记录,即可看到被拒绝的客户端IP。 - 在Azure Monitor的Log Analytics中运行Kusto查询直接提取:
AzureDiagnostics | where ResourceType == "SQLSERVERS" | where Category == "FirewallLogs" | where action_s == "DENY" | project client_ip_s, time_generated, message_s
2. 获取客户端实际连接IP
除日志外,还有这些实用方法:
- 在VM上执行网络追踪命令:
tracert <你的SQL服务器名>.database.windows.net,查看最终跳转的出口IP,即为VM连接SQL时的源IP。 - 在VM终端直接获取公网出口IP:PowerShell执行
Invoke-RestMethod https://api.ipify.org,或CMD执行curl ifconfig.me。 - 临时开启「允许Azure服务和资源访问此服务器」规则,用VM连接SQL后执行以下SQL查询,获取当前连接的IP:
SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;
查询完成后立即关闭该宽范围规则。
3. 非托管标识的排查建议
- 检查VM网络出口配置:如果VM使用了NAT网关或代理服务器,需将NAT网关的公网IP加入SQL防火墙白名单,而非VM自身的IP。
- 验证VNet相关配置:
- 若跨订阅VNet未对等,VM只能走公网访问SQL,需确保VM的公网IP已加入白名单(内网IP无效)。
- 若配置了VNet服务端点,需在SQL防火墙规则中添加对应VNet子网,而非单个IP。
- 测试网络连通性:用
Test-NetConnection <你的SQL服务器名>.database.windows.net -Port 1433(PowerShell)或telnet <你的SQL服务器名>.database.windows.net 1433验证端口是否可达,排除链路故障。 - 检查防火墙规则优先级:Azure SQL防火墙规则按匹配顺序生效,确保允许规则的优先级高于拒绝规则,避免被其他规则覆盖。
- 验证SQL登录权限:即使IP白名单生效,登录名无对应权限也会报错。执行以下SQL验证:
-- 检查登录名是否存在 SELECT name, type_desc FROM sys.server_principals WHERE name = '<你的登录名>'; -- 检查登录名服务器权限 SELECT permission_name FROM sys.server_permissions WHERE grantee_principal_id = (SELECT principal_id FROM sys.server_principals WHERE name = '<你的登录名>');
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

