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

使用服务主体从Azure Databricks写入Synapse专用SQL池遇凭证传递错误

排查Credential Passthrough令牌获取失败问题

核心排查方向

  • 集群配置细节复核:
    确认集群为高级/标准模式(基础模式不支持凭证传递)、Spark版本≥3.0;在集群编辑页,Azure Data Lake Storage Credential Passthrough已勾选,且未勾选Enable single user access(该选项限制单用户,不适用于服务主体场景)。即使之前确认过,也建议重新检查配置后重启集群,确保变更生效。
  • 服务主体权限链验证:
    服务主体需同时具备:ADLS Gen2存储账户的Storage Blob Data Contributor权限(Databricks读取源数据、写入临时文件都需要);Synapse专用SQL池的db_owner权限,且确认权限是授予目标服务主体而非其他身份。
  • 代码写入逻辑检查:
    写入Synapse时不能混用其他认证方式(比如硬编码密钥、SAS令牌),否则会覆盖凭证传递逻辑。正确的写入配置示例:
    df.write \
      .format("com.databricks.spark.sqldw") \
      .option("url", "jdbc:sqlserver://<synapse-workspace>.sql.azuresynapse.net:1433;database=<db-name>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.sql.azuresynapse.net;loginTimeout=30;") \
      .option("dbtable", "<schema>.<table-name>") \
      .option("forwardSparkAzureStorageCredentials", "true") \
      .option("tempDir", "abfss://<container>@<storage-account>.dfs.core.windows.net/temp") \
      .mode("append") \
      .save()
    
    重点确保forwardSparkAzureStorageCredentials设为true,且tempDir指向的ADLS路径服务主体有读写权限。
  • 作业运行身份确认:
    如果是通过Databricks作业执行代码,需确认作业的运行身份是目标服务主体,而非个人用户——凭证传递基于当前运行身份,身份不匹配会导致令牌获取失败。

额外验证步骤

  • 先执行dbutils.fs.ls("abfss://<container>@<storage-account>.dfs.core.windows.net/"),验证服务主体能否正常访问ADLS Gen2;
  • 用服务主体登录Synapse Studio,手动执行建表/插入操作,确认db_owner权限生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:17:21