在Databricks执行Synapse专用SQL池存储过程时遇401未授权错误求助
解决Databricks执行Synapse专用SQL池存储过程时的401未授权问题
出现这个问题的核心原因是:Synapse Studio执行存储过程时使用的身份(你的登录账户或Synapse托管身份)具备数据湖访问权限,但Databricks连接SQL池时所用的身份没有对应权限,导致访问外部表指向的Parquet文件时被拒绝。以下是具体排查和解决步骤:
检查Databricks连接SQL池的身份权限
- 如果使用Databricks集群服务主体连接SQL池:需确保该服务主体在数据湖存储账户的IAM中被授予Storage Blob Data Reader权限(若存储过程涉及写入操作则需额外添加Storage Blob Data Contributor)。
- 如果使用Azure AD直通认证:执行Databricks作业的用户必须拥有数据湖存储的对应访问权限,同时确认Databricks的AD直通配置已正确启用,无权限遗漏。
验证数据湖存储的IAM配置
登录Azure门户,进入目标数据湖存储账户的「访问控制(IAM)」页面,检查以下内容:- 确认Databricks所用身份(服务主体/直通用户)已被添加到权限列表中,且权限范围覆盖外部表指向的容器或路径。
- 避免使用「所有者」「参与者」这类管理权限,优先使用存储专用的细粒度权限(如Storage Blob Data Reader)。
测试Databricks到数据湖的直接访问
在Databricks Notebook中用相同身份直接读取数据湖的Parquet文件,验证基础权限是否正常:df = spark.read.parquet("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<文件路径>") df.show()如果此操作也返回401,说明问题出在Databricks与数据湖的权限配置,和Synapse SQL池无关,需先解决这个基础问题。
确认Synapse外部数据源的身份配置
若Synapse外部数据源使用的是Synapse托管身份,需确保该托管身份已被授予数据湖存储的访问权限,同时Databricks连接SQL池的身份拥有执行该存储过程的权限(如EXECUTE权限)。
若外部数据源使用的是AD用户身份,则Databricks调用时的身份必须与该用户匹配,或拥有同等数据湖访问权限。
内容的提问来源于stack exchange,提问作者Shanmukh S
相关产品推荐
相关产品推荐

