You need to enable JavaScript to run this app. 使用Python、ODBC Simba驱动及Azure AD服务主体连接Azure Databricks报错求助
优惠活动
大模型
产品
解决方案
定价
更多

使用Python、ODBC Simba驱动及Azure AD服务主体连接Azure Databricks报错求助

操作指引及问题修复方案

现有代码问题排查

你遇到的DSCurlRecvError报错通常由认证参数配置错误、令牌无效或者连接参数不匹配导致,现有代码的核心错误如下:

  • 拼写错误:变量名cliend_id应为client_id,AuthenticationContext构造函数末尾缺少右括号,token.get('accessToken')调用末尾缺少右括号
  • 认证库过时:ADAL库已被微软正式废弃,对新版Azure AD端点兼容性存在缺陷,建议替换为MSAL库
  • 连接参数错误:Simba ODBC驱动的访问令牌传递参数为AccessToken,不存在Auth_AccessToken、Auth_Flow参数
  • 令牌资源错误:获取Azure AD令牌时的资源参数必须固定为2ff814a6-3e0b-4ab1-a560-142d83053c80(Azure Databricks官方应用ID),否则获取的令牌无法用于Databricks认证

前置配置要求

  • 服务主体已添加到Azure Databricks工作区,并分配了对应集群/ SQL仓库的访问权限
  • 已安装最新版Simba Spark ODBC驱动,libsparkodbc_sb64.so路径配置正确
  • 运行环境可正常访问Databricks工作区域名的443端口,无防火墙/代理拦截

可运行参考代码

import os
import msal
import pyodbc

# 配置参数
TENANT_ID = "你的Azure AD租户ID"
CLIENT_ID = "服务主体的应用ID"
CLIENT_SECRET = "服务主体的客户端密钥"
DRIVER_PATH = os.getenv("SIMBA_DRIVER", "libsparkodbc_sb64.so的完整路径")
DATABRICKS_HOST = "你的工作区域名,例如xxx.azuredatabricks.net,不要带https前缀"
HTTP_PATH = "集群或SQL仓库的HTTP路径"

# 初始化MSAL客户端获取令牌
msal_authority = f"https://login.microsoftonline.com/{TENANT_ID}"
msal_app = msal.ConfidentialClientApplication(
    client_id=CLIENT_ID,
    client_credential=CLIENT_SECRET,
    authority=msal_authority
)
# Databricks固定资源ID
scopes = ["2ff814a6-3e0b-4ab1-a560-142d83053c80/.default"]
token_result = msal_app.acquire_token_for_client(scopes=scopes)

if "access_token" not in token_result:
    raise Exception(f"获取令牌失败:{token_result.get('error_description')}")

# 构造ODBC连接字符串
odbc_conn_str = (
    f"Driver={DRIVER_PATH};"
    f"Host={DATABRICKS_HOST};"
    "PORT=443;"
    f"HTTPPath={HTTP_PATH};"
    "AuthMech=11;"
    f"AccessToken={token_result['access_token']};"
    "SSL=1;"
    "ThriftTransport=2;"
)

# 测试连接
with pyodbc.connect(odbc_conn_str, autocommit=True) as conn:
    with conn.cursor() as cursor:
        cursor.execute("SELECT current_user()")
        print(cursor.fetchone())

额外排查点

  • 若仍报错可开启ODBC驱动日志,在连接字符串中添加LogLevel=6;LogPath=/tmp/odbc.log查看详细错误信息
  • 确认服务主体没有被Azure AD禁用,权限配置没有过期
  • 每次新建连接前重新获取令牌,避免令牌过期导致认证失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:00:01