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

使用pyodbc+ActiveDirectoryPassword连接无服务器Azure Synapse SQL池时遇登录超时

使用pyodbc连接无服务器Azure Synapse SQL池的AD认证失败问题

问题描述

尝试通过Python的pyodbc库对无服务器Azure Synapse SQL池执行SQL查询,采用Azure Active Directory用户认证,代码如下:

import pyodbc

driver = '{ODBC Driver 18 for SQL Server}'
server = '<server>'
db = '<db>'
username = '<user>@<domain>@<synapse-workspace>'
password = '<password>'

with pyodbc.connect(
    f'Driver={driver};Server=tcp:{server},1433;Database={db};Uid={username};Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryPassword;') as conn:
    cursor = conn.cursor()  
    cursor.execute('SELECT TOP 100 * from foo') 
    row = cursor.fetchone()
    while row:
        print(row) 
        row = cursor.fetchone()

运行后首次报错:

pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

用户反馈:相同的用户名和密码可以正常登录Synapse工作区和Azure Data Studio,但代码无法连接。

更新:延长超时后的错误

延长连接超时时间后,收到新错误:

pyodbc.Error: ('FA004', '[FA004] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Failed to authenticate the user '<user>@<domain>@<synapse-workspace>' in Active Directory (Authentication option is 'ActiveDirectoryPassword').
Error code 0xA190; state 41360
{"ver":"1.0","account_type":"Unknown","cloud_instance_name":"microsoftonline.com","cloud_audience_urn":"urn:federation:MicrosoftOnline"}
Unknown account type. (0) (SQLDriverConnect)')

解决方法

  • 修正用户名格式:当前用户名<user>@<domain>@<synapse-workspace>是错误的。Azure AD用户的正确格式为<user>@<domain>(即企业邮箱账号),不需要追加@<synapse-workspace>后缀——该后缀仅适用于Synapse的本地SQL管理员账号,不适用于AD用户。
  • 统一ODBC驱动版本:错误信息中同时出现了ODBC Driver 18和17,需确保代码中指定的驱动版本与系统已安装的版本一致。建议统一使用{ODBC Driver 18 for SQL Server},并确认该版本已正确安装。
  • 核对连接字符串参数:
    • Server参数需填写无服务器SQL池的正确终结点,格式通常为<workspace-name>-ondemand.sql.azuresynapse.net
    • 确认Authentication=ActiveDirectoryPassword参数拼写正确,无遗漏或错误
    • 无服务器池的Database参数可填写master(默认数据库)或目标业务数据库
  • 排查网络与防火墙:
    • 确认运行代码的环境能访问1433端口,本地环境需在Synapse工作区的防火墙设置中添加客户端IP白名单
    • 检查是否有代理、防火墙拦截了ODBC连接请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:46:04