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

使用pyodbc连接Synapse Sql失败:Azure函数托管身份登录超时问题

Azure函数托管身份连接Synapse SQL超时问题排查

你的代码里用ActiveDirectoryIntegrated认证方式不对,这是导致超时的核心原因之一,结合托管身份场景,按下面的步骤排查修正:

1. 替换认证方式

Azure函数的托管身份(系统/用户分配)要改用ActiveDirectoryDefault(推荐,适配新版驱动)或ActiveDirectoryMSI(旧版驱动),不要用ActiveDirectoryIntegrated(这个是针对本地AD集成场景的)。修正后的代码示例:

def fun():
    # 必须填完整的Synapse服务器FQDN,格式:xxx.sql.azuresynapse.net
    server = 'servername.sql.azuresynapse.net'
    db_name = 'dbname'
    conn_str = (
        'DRIVER={ODBC Driver 17 for SQL Server};'
        f'SERVER={server};'
        'Authentication=ActiveDirectoryDefault;'
        f'DATABASE={db_name};'
    )
    conn = pyodbc.connect(conn_str)
    # timeout单位是秒,3000秒太离谱,改成30秒即可
    conn.timeout = 30
    return conn

2. 配置托管身份权限

  • 给Azure函数的托管身份在Synapse SQL中添加登录权限:在Synapse Studio的管理 > SQL池 > 权限里,添加托管身份为登录用户,然后映射到目标数据库的用户,分配必要的角色(比如db_datareader、db_datawriter)
  • 如果是无服务器SQL池,需要在数据库中执行创建用户的脚本:
    CREATE USER [你的函数托管身份名称] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [你的函数托管身份名称];
    

3. 检查网络规则

  • 如果Synapse SQL开启了VNet防火墙,要把Azure函数所在的VNet加入Synapse的允许列表;或者临时开启“允许Azure服务和资源访问此服务器”选项测试
  • 确认Azure函数的出站规则没有阻断1433端口(SQL默认端口)

4. 验证驱动环境

优先使用ODBC Driver 18 for SQL Server,比17版对托管身份的支持更稳定。如果是用Azure函数的Python环境,确保部署时包含了对应的驱动依赖(Linux环境需要提前安装驱动包)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:04:59