"Deny public network access" 设置为 Yes 时外部表不工作

External tables not working when "Deny public network access" is set to Yes

我通过在我的 Azure SQL 数据库服务器的防火墙设置中将“拒绝 public 网络访问”旋钮设置为是来启用私有 link。除外部数据源(外部表)外,一切都按预期工作。外部表只是 link 到属于同一服务器的另一个 Azure SQL 数据库中的表。在启用 Private link 之前,一切正常。如果我尝试查询外部表,我会收到此错误消息:

“从 [mydbserver].database.windows.net.[mydbname] 检索数据时出错。收到的基本错误消息是:'原因:建立与 SQL 的连接时发生特定于实例的错误服务器。连接被拒绝,因为拒绝 Public 网络访问设置为是 (https://docs.microsoft.com/azure/azure-sql/database/connectivity-settings#deny-public-network-access). To connect to this server, use the Private Endpoint from inside your virtual network (https://docs.microsoft.com/azure/sql-database/sql-database-private-endpoint-overview#how-to-set-up-private-link-for-azure-sql-database)。"

我在文档中找不到任何关于外部数据源和外部表与私有 Link 设置相结合的任何限制。

使用标准方式创建的外部表:“CREATE EXTERNAL DATA SOURCE”和“CREATE EXTERNAL TABLE”。我也尝试在启用 Private Link 后重新创建数据源和表,但错误仍然存​​在...

您需要使用姓名yourdbname.privatelink.database.windows.net

之后您可能会收到另一个错误消息,提示此名称不正确。在这种情况下,您遇到了 DNS 问题,您需要在 VM 的主机文件中添加一个条目,其中包含端点的 IP。如果您的 VM 在该 VNET 之外,那就是另一回事了。

然后您需要在主机文件中添加端点的 public IP。我还在尝试用一个严肃的dns来解决这个问题,还没想好。

有关详细信息,请参阅此内容;

https://techcommunity.microsoft.com/t5/azure-database-support-blog/lesson-learned-126-deny-public-network-access-allow-azure/ba-p/1244037

想要重申对 Microsoft Q&A 上发布的同一问题的回答:External tables not working when “Deny public network access” is set to Yes

限制在于 Polybase,因为它目前不支持私有 Link。根据 PG:

Polybase does not support using private link at this time. Please direct the customer to use Managed Identity to secure the connection to Azure Storage.

虽然,这对您来说可能不是一个可行的解决方案,但是,如果您需要访问的数据被提取到一个存储帐户,然后通过 PG 引用的方法导入,这可能是一个可行的解决方案。使用 flip/flop 个端点可以逆转相同的过程,并且可以在 VNET + 托管身份的安全范围内完成。