Azure DataBricks:Root用户创建DataFrame时遇权限拒绝问题
排查与修复步骤
验证SAS密钥权限有效性
确认重新生成的SAS密钥包含读取(R)、写入(W)、列表(L)权限,资源类型覆盖服务(S)、容器(C)、对象(O),且有效时间未过期。可在Azure Portal存储账户的「共享访问签名」页面核对这些参数。检查挂载命令与挂载点可用性
确保挂载命令的路径、SAS令牌格式正确,无多余字符。示例挂载命令:dbutils.fs.mount( source = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/<文件夹路径>", mount_point = "/mnt/<挂载名>", extra_configs = {"fs.azure.sas.<容器名>.<存储账户名>.dfs.core.windows.net": "<你的SAS令牌>"} )挂载后执行
dbutils.fs.ls("/mnt/<挂载名>"),若能正常列出内容,说明挂载本身权限无问题,问题出在DataFrame创建环节。确认DataFrame路径指向挂载点
创建DataFrame时必须使用挂载点路径(如/mnt/mystorage/data.csv),而非存储账户原始路径(abfss://...),除非你直接通过SAS访问原始路径,此时需确保SAS权限覆盖该路径。检查存储账户防火墙与网络配置
若存储账户开启防火墙,需将DataBricks工作区的IP地址加入允许列表,或临时设置为允许所有网络访问,排查是否是网络权限导致的拒绝。核对ADLS Gen2的RBAC权限(若适用)
若使用ADLS Gen2,除SAS密钥外,Root用户对应的账户需拥有Storage Blob Data Contributor角色——这是对ADLS Gen2数据读写的核心RBAC权限,SAS权限会与RBAC权限叠加,RBAC不足也会触发权限拒绝。排查DataFrame代码的路径正确性
确认代码中指定的文件路径拼写正确,且目标文件确实存在于挂载点内。比如:df = spark.read.csv("/mnt/mystorage/myfolder/data.csv")部分场景下,文件不存在的错误会被混淆为权限拒绝,需优先验证路径有效性。
内容的提问来源于stack exchange,提问作者arshaikh0171

