启用Unity Catalog后Databricks无法使用或列出挂载点
在Databricks工作区中挂载了Azure存储容器,启用Unity Catalog(UC)后,非管理员用户无法通过dbutils.fs.ls('/mnt/')列出挂载点,执行以下代码时抛出权限异常:
dbutils.fs.ls('/mnt/')
异常信息:
ExecutionError: An error occurred while calling o438.ls.
org.apache.spark.SparkSecurityException: [INSUFFICIENT_PERMISSIONS] Insufficient privileges:
User does not have permission SELECT on any file. SQLSTATE: 42501
at com.databricks.sql.acl.Unauthorized.throwInsufficientPermission
现有多个通过ADF自动化运行的脚本,无法将挂载点改为Volumes。
注册挂载路径为外部位置并分配权限
由管理员将已挂载的/mnt/xxx路径注册为Unity Catalog的外部位置(External Location),然后给执行脚本的用户/用户组分配该外部位置的SELECT权限。示例SQL命令:-- 创建外部位置(需管理员执行) CREATE EXTERNAL LOCATION IF NOT EXISTS my_mount_location URL 'dbfs:/mnt/your-specific-mount' WITH (CREDENTIAL your_credential); -- 给用户组分配SELECT权限 GRANT SELECT ON EXTERNAL LOCATION my_mount_location TO `your-adf-exec-group`;注:若需访问多个挂载点,需逐个注册或注册父路径(如
dbfs:/mnt/)并分配权限。使用权限足够的服务主体执行ADF脚本
将ADF中执行Databricks任务的身份切换为拥有挂载路径访问权限的服务主体,该服务主体需被管理员赋予对应外部位置的SELECT权限,无需修改现有脚本中的路径逻辑。调整UC的DBFS权限豁免设置(谨慎使用)
由管理员在Databricks工作区的管理控制台 > Unity Catalog > 权限设置中,配置允许非管理员访问特定DBFS路径(如/mnt/),此方法需权衡安全性,避免过度开放权限。
内容的提问来源于stack exchange,提问作者NAVEEN KUMAR REDDY BEDADALA

