我有一个托管的 Azure SQL Server 实例,其中包含一个包含多个数据库的弹性池。我想在其中两个数据库之间进行跨数据库查询。我知道执行此操作的唯一方法是使用外部表(而不是链接服务器)。我想知道应该在 Azure 门户的 SQL Server 防火墙边栏选项卡中设置哪些防火墙规则。
当配置外部表并尝试查询时,我收到以下消息:
Error retrieving data from {server}.{remotedb}. The underlying error message received was: 'Cannot open server '{server}' requested by the login. Client with IP address '{origindb}' 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.'.
我可以在 Azure 门户中更改 SQL Server 实例的防火墙规则。防火墙刀片中的选项包括:
- “允许 Azure 服务和资源访问此服务器”
- 单独的防火墙规则
- 虚拟网络
选项 1(“允许 Azure 服务和资源访问此服务器”)
这有效,但是我允许任何 Azure 项目防火墙访问我的数据库。这在某种程度上否定了防火墙的意义,因为任何希望“未经授权”访问的人都可以简单地创建一个 Azure 帐户,创建一个 VM/SQL 并以此方式绕过防火墙。
选项 2(单独的防火墙规则)
如果我添加错误消息中给出的 IP,它就会起作用。但是我不知道该 IP 是否会改变,我找不到 IP 地址范围,也不知道该 IP 上其他用户的数据库是什么。
我对这个 IP 地址有点不清楚,因为我找不到任何有关其 SQL IP 范围的 Azure 文档。
选项 3(虚拟网络)
我认为这并不适用,因为它是通过虚拟网络访问您的数据库服务器的,并且我认为如果不将托管数据库添加到虚拟机并自行管理,我就无法将它们放在虚拟网络中。
在设置外部表时,我也尝试使用 localhost 和 127.0.0.1 作为外部数据源上的位置,但这些无法解析。
有人可以帮忙吗?