同一资源组下无法从Azure Data Factory连接Azure SQL的问题求助
错误信息
ErrorCode=SqlFailedToConnect,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Cannot connect to SQL Database. Please contact SQL server team for further support. Server: 'xxxxxxxxxx.database.windows.net', Database: 'xxxxxxxxx', User: 'xxxxxxx'. Check the linked service configuration is correct, and make sure the SQL Database firewall allows the integration runtime to access.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=Cannot open server 'sqlserver-represent-prod' requested by the login. Client with IP address '51.xxx.xxx.xxx' is not allowed to access the server. To enable access, use the 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 Data Factory(ADF)默认使用的托管集成运行时(IR)出站IP是动态变化的:
- 之前其他环境无需配置防火墙,大概率是因为那边的Azure SQL开启了「允许Azure服务和资源访问此服务器」权限,或者ADF配置了托管虚拟网络,直接通过Azure内部网络访问SQL。
- 当前环境中,你添加单个IP的防火墙规则只能临时生效,默认托管IR的出站IP会定期更换,所以过段时间就会出现新IP被拦截的情况。
解决办法
方法1:开启Azure服务访问权限(最简单)
在Azure SQL服务器的防火墙设置里,找到「允许Azure服务和资源访问此服务器」的开关并打开。ADF作为Azure官方服务,就能直接绕过公网IP限制访问SQL,无需再手动添加单个IP规则。
方法2:使用ADF托管虚拟网络(更安全)
如果需要严格的网络控制,给ADF配置托管虚拟网络,再通过**专用链接(Private Link)**连接Azure SQL。这种方式下,ADF与SQL的流量完全在Azure内部网络传输,不会暴露公网IP,彻底解决动态IP问题。
方法3:添加ADF区域全量出站IP范围(不推荐)
如果必须用公网访问,可以在Azure SQL防火墙中添加ADF所在区域的所有托管IR出站IP范围。但这种方式维护成本高,IP范围可能会更新,不如前两种方法可靠。
内容的提问来源于stack exchange,提问作者Mayuran Parathalingam

