Azure Databricks Unity Catalog托管卷无法在Notebook访问的问题
问题描述
配置Unity Catalog及托管卷后,可在Databricks Workspace UI中上传、下载托管卷文件,但无法通过Notebook访问。创建全用途计算集群后执行dbutils.fs.ls("/Volumes/catalog1/schema1/volumn11")等代码时,收到403未授权错误:
Operation failed: "This request is not authorized to perform this operation.", 403, GET
配置流程
- 本人为Azure Databricks账户管理员、元数据存储管理员及工作区管理员
- 创建Premium Tier级别的Azure Databricks工作区
- 创建名为
metastore1的Databricks元数据存储 - 创建启用分层命名空间的Azure ADSL Gen2存储账户
adsl_gen2_1 - 创建Azure Databricks访问连接器
access_connector_for_dbr_1(Azure托管标识) - 为
access_connector_for_dbr_1分配adsl_gen2_1的Storage Blob Data Contributor和Storage Queue Data Contributor角色 - 在
adsl_gen2_1下创建两个容器:adsl_gen2_1_container_catalog_default、adsl_gen2_1_container_schema1 - 创建Databricks存储凭据
dbr_strg_cred_1,关联access_connector_for_dbr_1的资源ID,未设置权限 - 创建两个使用
dbr_strg_cred_1的外部位置:dbr_ext_loc_catalog_default(指向对应容器)、dbr_ext_loc_schema1(指向对应容器),均未设置权限 - 在
metastore1下创建Catalogcatalog1,设置dbr_ext_loc_catalog_default为存储位置 - 在
catalog1下创建Schemaschema1,设置dbr_ext_loc_schema1为存储位置 - 在
schema1下创建托管卷volumn11 - 在Databricks UI可正常操作该卷,但Notebook执行以下代码均报错:
dbutils.fs.ls("/Volumes/catalog1/schema1/volumn11")dbutils.fs.ls("dbfs:/Volumes/catalog1/schema1/volumn11")spark.read.format("csv").option("header","True").load("/Volumes/catalog1/schema1/volumn11/123.csv")spark.read.format("csv").option("header","True").load("dbfs:/Volumes/catalog1/schema1/volumn11/123.csv")
全用途计算集群详情
- 类型:单节点
- 访问模式:单用户
- 单用户:本人
- 运行时版本:14.3 LTS
- 用户级数据访问凭据传递:禁用
排查与解决步骤
1. 补全存储凭据与外部位置权限
存储凭据和外部位置未配置权限是核心问题,需为你的用户分配必要权限:
-- 授予存储凭据的USE权限 GRANT USE ON STORAGE CREDENTIAL dbr_strg_cred_1 TO `你的用户名@域名.com`; -- 授予外部位置的USE权限 GRANT USE ON EXTERNAL LOCATION dbr_ext_loc_catalog_default TO `你的用户名@域名.com`; GRANT USE ON EXTERNAL LOCATION dbr_ext_loc_schema1 TO `你的用户名@域名.com`;
2. 配置托管卷权限
确保你对目标托管卷拥有访问权限:
GRANT SELECT, MODIFY ON VOLUME catalog1.schema1.volumn11 TO `你的用户名@域名.com`;
3. 刷新权限缓存
执行命令让权限变更立即生效:
REFRESH PRIVILEGES;
4. 验证访问路径格式
可尝试使用Unity Catalog标准命名格式访问托管卷:
dbutils.fs.ls("volumes/catalog1/schema1/volumn11") spark.read.format("csv").option("header","True").load("volumes/catalog1/schema1/volumn11/123.csv")
5. 二次确认Azure RBAC配置
检查访问连接器access_connector_for_dbr_1的托管标识是否确实在ADLS Gen2存储账户adsl_gen2_1上拥有Storage Blob Data Contributor角色,且角色分配已生效(RBAC变更可能需要数分钟同步)。
内容的提问来源于stack exchange,提问作者Albert Wang
相关产品推荐
相关产品推荐

