不允许 IP 地址为 'yyy.yy.yy.yy' 的客户端访问服务器。我的客户端 ip 是 xxx.xx.xx.xx

Client with IP address 'yyy.yy.yy.yy' is not allowed to access the server. My client ip is xxx.xx.xx.xx

我正在尝试在 Azure 中登录新创建的 sql 服务器。 在连接之前,我使用 azure-python sdk 以编程方式添加我的客户端 ip。 添加我的客户端 ip 后,我尝试登录数据库。

ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Cannot open server 'x' requested by the login. Client with IP address 'yyy.yy.yy.yy' is not allowed to access the server.  To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect. (40615) (SQLDriverConnect)")

此 ip 与我在机器中获得的 public ip 不同。是什么原因?我已连接到我公司的 vpn。

我用它来检索我的客户端 ip - https://checkip.amazonaws.com/ - xxx.xx.xx.xx

此外,在 azure 中使用了添加客户端 ip - 这给出了与 xxx.xx.xx.xx 相同的结果。

这里的ip是多少yyy.yy.yy.yy?我如何检索它以便我能够以编程方式将其列入白名单?

我怀疑您是通过 VPN 隧道而不是主接口连接到 Azure 服务;因此,您不会向 Azure 服务提供您的 public IP。您从 checkip URL 获取的 IP 是您的 public IP。

您可以通过检查 Windows 终端中 route print 的输出或 Linux 中的 route 的输出来验证这一点。当您的 VPN 处于活动状态时,您应该会看到 Azure 服务的子网列出了一个与您的 LAN IP 不匹配的接口。像这样:

       0.0.0.0         0.0.0.0        192.168.2.1     192.168.2.12     25
       172.31.0.0      255.255.0.0    10.168.0.100    10.168.44.64      1

在上面的示例中,第一行显示我的 LAN 接口作为默认路由 (192.168.2.12),它将用于所有内容 (0.0.0.0);除非我试图到达 172.31.0.0/16(假设是我的“azure 服务”)。在这种情况下使用 10.168.44.64 接口,在这种情况下是 VPN 接口。

使用 192.168.2.12 的默认接口会将我的 public IP 呈现给不符合 VPN 规则的在线服务,例如,您的 checkip URL.

如果是这种情况,那么您需要根据您的要求为您的 VPN 接口添加路由命令指定的子网或确切的 IP。在此示例中,它将是 10.168.0.100.

如果您想以编程方式执行此操作,则必须获取 VPN 接口的当前 IP。