Databricks访问Azure Fabric OneLake遭403权限禁止问题求助
解决Azure OneLake挂载后403禁止访问的权限问题
问题现象
使用PySpark成功挂载Azure OneLake存储账户后,执行display(dbutils.fs.ls('/mnt/lake'))或读取Lakehouse内文件时,返回403 Forbidden错误,提示无权对指定工作区、工件执行操作。
挂载使用的PySpark代码如下:
url = "abfss://DataEngineeringWKSP@onelake.dfs.fabric.microsoft.com/sqlite_lakehouse.Lakehouse" mount_folder = "/mnt/lake" # OAuth configuration settings for OneLake configs = { "fs.azure.account.auth.type.onelake.dfs.fabric.microsoft.com": "OAuth", "fs.azure.account.oauth.provider.type.onelake.dfs.fabric.microsoft.com": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider", "fs.azure.account.oauth2.client.id.onelake.dfs.fabric.microsoft.com": "xxxxxx-a061-4899-994b-81253d864bc8", "fs.azure.account.oauth2.client.secret.onelake.dfs.fabric.microsoft.com": "xxxxxx~1Q.B-Ey12zs066D_G3.E6bslnE_LqY-aFs", "fs.azure.account.oauth2.client.endpoint.onelake.dfs.fabric.microsoft.com": "https://login.microsoftonline.com/xxxxxxxxxxxxxf12fc6/oauth2/token" } mounted_list = dbutils.fs.mounts() mounted_exist = False for item in mounted_list: if mount_folder in item.mountPoint: mounted_exist = True break if not mounted_exist: dbutils.fs.mount(source=url, mount_point=mount_folder, extra_configs=configs)
解决方案:配置Fabric工作区与Lakehouse权限
1. 为服务主体分配Fabric工作区权限
- 登录Azure Fabric,进入对应的
DataEngineeringWKSP工作区 - 点击工作区右上角的「管理访问权限」按钮
- 在访问权限面板中,点击「添加用户或组」
- 输入挂载代码中使用的服务主体客户端ID对应的名称,选择「成员」或「管理员」权限(成员权限满足基础读取需求,管理员权限支持全操作)
- 保存权限配置
2. 为服务主体分配目标Lakehouse权限
- 在Fabric工作区内,进入目标
sqlite_lakehouseLakehouse - 点击Lakehouse右上角的「...」菜单,选择「管理权限」
- 点击「添加用户或组」,找到对应的服务主体,授予「读取者」或「贡献者」权限(读取文件至少需要读取者权限)
- 保存权限配置
3. 额外排查步骤
- 确认挂载代码中的服务主体信息(客户端ID、客户端密钥、租户ID)完全正确
- 检查服务主体的客户端密钥是否过期,若过期需在Azure AD中重新生成密钥
- 权限配置完成后,执行
dbutils.fs.refreshMounts()刷新挂载,再尝试读取操作
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

