使用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
相关产品推荐
相关产品推荐

