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

如何让ADF中Python脚本访问禁用公网的Azure SQL Server(私有端点)

解决ADF Batch服务中Python脚本无法访问私有Azure SQL Database的问题

问题核心

你的ADF纯SQL管道能正常访问禁用公网的SQL Server,但通过Batch运行的Python脚本无法连接,本质原因是:

  • 纯SQL管道依赖ADF集成运行时(托管或自托管),私有网络场景下该IR已配置为可访问SQL私有端点
  • Batch任务默认在公共网络环境运行,无法直接访问仅允许私有访问的SQL Server

解决方案

1. 将Batch账户注入目标虚拟网络

要让Batch节点进入私有网络访问SQL Server,需完成以下配置:

  • 确保Batch账户为用户订阅模式(Batch服务模式不支持VNet注入,若当前是服务模式需重新创建账户)
  • 将Batch账户部署到与SQL Server同VNet的子网,或与SQL所在VNet对等连接的子网中
  • 配置子网的NSG规则,允许Batch节点访问SQL Server的1433端口(或SQL私有端点的自定义端口)

2. 配置ADF使用自托管集成运行时连接Batch

  • 创建自托管集成运行时(IR),并将其部署到能访问SQL Server的VNet内节点(如Azure VM)
  • 在ADF的Batch链接服务配置中,选择该自托管IR,确保Batch任务通过IR所在的私有网络发起连接

3. 调整Python脚本的连接地址

将SQL Server的连接地址替换为私有端点的DNS名称或私有IP,避免使用公网域名:

import urllib
import sqlalchemy
import pandas as pd

sql_query = 'SELECT TOP (1000) * FROM [dbo].[Table]'

# 替换为SQL私有端点的DNS名称或私有IP
server = '<sql-private-endpoint-dns-or-ip>'
database = '<dbname>'
username = '<username>'
password = '<password>'

driver = '{ODBC Driver 17 for SQL Server}'

odbc_str = f'DRIVER={driver};SERVER={server};PORT=1433;UID={username};DATABASE={database};PWD={password}'
connect_str = 'mssql+pyodbc:///?odbc_connect=' + urllib.parse.quote_plus(odbc_str)

engine = sqlalchemy.create_engine(connect_str)
df = pd.read_sql(sql_query, engine)
engine.dispose()

验证要点

  • 确认Batch节点所在子网能ping通SQL的私有端点IP
  • 检查SQL Server的防火墙规则,允许Batch子网的IP范围访问
  • 确保自托管IR节点能正常连接SQL Server

内容的提问来源于stack exchange,提问作者Freejack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:34:52