使用系统分配托管身份的Cosmos DB链接服务在Synapse Notebook报错
解决Synapse Notebook中托管身份认证Cosmos DB链接服务的AuthTypeNotSupported错误
问题原因
mssparkutils.credentials.getConnectionStringOrCreds()方法仅支持基于连接字符串、密钥这类传统认证方式的链接服务,不支持托管身份类型的链接服务,这是触发AuthTypeNotSupported错误的核心原因。
解决方案
直接使用DefaultAzureCredential调用Synapse的系统分配托管身份完成认证,无需通过链接服务获取凭证。具体修改如下:
修改后的完整代码
import pandas as pd import json from azure.identity import DefaultAzureCredential from azure.cosmos import CosmosClient # 读取CSV数据到DataFrame csv_file_path = "file path" data_frame = pd.read_csv(csv_file_path, encoding='latin1') # 转换DataFrame为JSON格式 json_data = data_frame.to_json(orient='records') # 使用系统分配托管身份初始化Cosmos DB客户端 cosmosdb_endpoint = "你的Cosmos DB端点" database_name = "SNM" container_name = "AliTest" # 自动调用Synapse系统分配托管身份完成认证 credential = DefaultAzureCredential() client = CosmosClient(cosmosdb_endpoint, credential=credential) # 获取容器引用 container = client.get_database_client(database_name).get_container_client(container_name) # 批量插入数据 for item in json.loads(json_data): container.upsert_item(item)
额外检查项
- 确保Synapse工作区的系统分配托管身份已被授予Cosmos DB的操作权限:
- 进入Azure门户的Cosmos DB资源页,打开「访问控制(IAM)」
- 添加角色分配,选择匹配需求的角色(如
Cosmos DB Built-in Data Contributor用于数据读写,DocumentDB Account Contributor用于账户级配置) - 将Synapse工作区的系统分配托管身份设为权限主体
内容的提问来源于stack exchange,提问作者Ali Naqi
相关产品推荐
相关产品推荐

