You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:45:16