如何通过Azure Function托管身份连接Azure SQL DW(专用SQL池)
问题根因与修复方案
首要修复点:环境变量名不匹配
你遇到的报错直接诱因是代码读取的环境变量名与实际配置项名不一致:
- 配置项中定义的Synapse连接参数key为:
SYNAPSE_SQL_server、SYNAPSE_SQL_database - 代码中读取的参数key为:
SYNAPSE_SQLDB_server、SYNAPSE_SQLDB_database
两者命名差了DB字段,会导致代码读取到的服务器地址、数据库名均为空值,最终拼接出的连接字符串无效,完全匹配报错中提到的SQL Network Interfaces,错误:25 - 连接字符串无效、参数不正确提示。
修复方法二选一即可:
- 修改配置项key,将两个配置的key改为和代码一致的
SYNAPSE_SQLDB_server、SYNAPSE_SQLDB_database - 修改代码读取逻辑,将对应行改为:
string synapse_db_server = GetEnvironmentVariable("SYNAPSE_SQL_server"); string synapse_db_name = GetEnvironmentVariable("SYNAPSE_SQL_database");
其他需校验的兼容项(修复变量后如果仍报错可逐一排查)
- 网络权限校验:
- 若Azure Function开启了VNet集成,需确保对应VNet的出站规则开放了Synapse服务的1433端口访问权限
- 需将Azure Function的所有出站IP添加到Synapse工作区的防火墙白名单,或开启Synapse防火墙的「允许Azure服务访问」开关
- 连接字符串兼容调整:Synapse专用SQL池不支持
MultipleActiveResultSets=true参数,建议将该参数从连接字符串拼接逻辑中移除 - 访问权限校验:Azure Function使用的托管身份(系统分配/用户分配)需要先在Synapse专用SQL池中创建对应登录名、用户,并授予
ext.test表的查询权限。
内容的提问来源于stack exchange,提问作者SDR
相关产品推荐
相关产品推荐

