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

使用ManagedIdentityCredential从Azure Synapse向Azure ML导数据时内核重启求助

正确实现方法及问题修复

问题根源分析

你的代码存在几个关键问题导致内核异常:

  • 错误使用存储服务的资源标识符https://storage.azure.com/,连接Synapse需指定https://database.windows.net/
  • 直接传递token对象给pyodbc,实际需要的是token.token属性值
  • 连接字符串中的变量未替换为实际值,驱动也未明确指定
  • 可能缺少必要的依赖包或驱动配置

修复后的完整代码

import os
import pyodbc
from azure.identity import ManagedIdentityCredential

# 获取托管身份客户端ID
client_id = os.environ.get('DEFAULT_IDENTITY_CLIENT_ID')
if not client_id:
    raise ValueError("环境变量DEFAULT_IDENTITY_CLIENT_ID未设置")

# 初始化托管身份凭据,获取Synapse对应的token
credential = ManagedIdentityCredential(client_id=client_id)
# Synapse专属资源标识符
token = credential.get_token('https://database.windows.net/')

# 替换为你的实际Synapse信息
synapse_server = "your-synapse-server-name.database.windows.net"
synapse_database = "your-database-name"

# 构建标准连接字符串,使用ODBC Driver 18 for SQL Server
connection_string = (
    f"Driver={{ODBC Driver 18 for SQL Server}};"
    f"Server=tcp:{synapse_server},1433;"
    f"Initial Catalog={synapse_database};"
    f"Encrypt=yes;"
    f"TrustServerCertificate=no;"
    f"Connection Timeout=30;"
)

# 传递token的具体值给pyodbc
conn = pyodbc.connect(
    connection_string,
    attrs_before={1256: token.token}
)

# 示例:查询数据验证连接
cursor = conn.cursor()
cursor.execute("SELECT TOP 10 * FROM your-table-name")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 关闭连接资源
cursor.close()
conn.close()

额外配置注意事项

  • 依赖包安装:执行pip install azure-identity pyodbc确保依赖齐全
  • 身份权限配置:给Azure ML的托管身份分配Synapse数据库的db_datareader或对应读取权限
  • 驱动检查:Azure ML Compute实例默认预装ODBC Driver 18,自定义环境需手动安装对应驱动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:37:48