Databricks中如何限制特定用户访问ADLS指定数据
可行性结论
完全支持该类细粒度权限规则配置,可以实现「仅指定Databricks用户访问ADLS中指定文件」的需求,以下是两种成熟可落地的配置方案,可根据自身环境选型。
方案选型参考
- 方案1(存储层原生管控):基于ADLS POSIX ACL + Databricks AAD凭据透传实现,适合未启用Unity Catalog的Premium版Databricks环境,权限直接在存储层生效,无法绕过
- 方案2(数仓层统一管控):基于Databricks Unity Catalog细粒度授权实现,适合已经部署UC的环境,配置流程更简单,权限统一在数据目录层维护
具体配置步骤
方案1:ADLS ACL + 凭据透传配置流程
- 开启凭据透传
在Databricks集群配置中开启Azure AD凭据传递功能,确保用户访问ADLS时,直接使用本人的AAD身份做鉴权;禁止使用全局存储密钥、共享服务主体挂载存储,这类配置会让所有集群用户共享同一套存储权限,无法做用户级隔离。 - 配置目录基础遍历权限
进入ADLS对应容器的ACL管理页,给用户1、用户2、用户3、用户4授予容器根目录以及data1.csv、data2.csv所在上级目录的执行权限(X),权限生效范围选「此目录和所有子目录」。这个权限仅允许用户遍历目录路径,无法读取任何文件内容,是文件级授权的前置要求,不要额外授予读、写权限。 - 配置单文件访问权限
- 找到
data1.csv文件,在文件级ACL配置中,给用户1、用户2授予该文件的读取权限(R)+执行权限(X),其余所有用户不授予该文件的任何权限,关闭父目录权限继承 - 找到
data2.csv文件,在文件级ACL配置中,给用户3、用户4授予该文件的读取权限(R)+执行权限(X),其余所有用户不授予该文件的任何权限,关闭父目录权限继承
- 找到
- 有效性验证
分别用四个用户的账号登录Databricks访问对应文件:用户1、用户2可正常读取data1.csv、访问data2.csv时返回权限拒绝;用户3、用户4可正常读取data2.csv、访问data1.csv时返回权限拒绝即为配置生效。
方案2:Unity Catalog细粒度授权配置流程
如果环境已经启用Databricks Unity Catalog,不需要在存储层做复杂ACL配置,直接在UC层完成授权即可:
- 基础配置
将ADLS存储容器注册为UC的外部位置,由UC统一承载存储访问身份,不要给任何用户直接授予外部位置的全量读/写权限,同时禁止用户在集群侧配置直连存储的密钥、服务主体,避免权限绕过。 - 外部表映射与授权
分别基于两个文件的存储路径创建外部表,再通过SQL命令完成用户授权,示例代码如下:-- 基于data1.csv路径创建外部表 CREATE TABLE IF NOT EXISTS catalog_name.schema_name.data1_table USING CSV LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/path/data1.csv'; -- 基于data2.csv路径创建外部表 CREATE TABLE IF NOT EXISTS catalog_name.schema_name.data2_table USING CSV LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/path/data2.csv'; -- 给用户1、用户2授予data1表的查询权限 GRANT SELECT ON TABLE catalog_name.schema_name.data1_table TO `user1@your-aad-domain.com`, `user2@your-aad-domain.com`; -- 给用户3、用户4授予data2表的查询权限 GRANT SELECT ON TABLE catalog_name.schema_name.data2_table TO `user3@your-aad-domain.com`, `user4@your-aad-domain.com`; - 有效性验证
分别用四个用户的账号登录Databricks,通过UC访问对应表:用户1、用户2可正常查询data1_table,查询data2_table时报权限错误;用户3、用户4可正常查询data2_table,查询data1_table时报权限错误即为配置生效。
配置注意事项
- 若选择ACL方案,必须保证用户拥有文件所在全路径的执行权限,缺少任意一级目录的执行权限,即使用户有文件本身的读权限也无法正常访问
- 若选择UC方案,必须开启集群的访问隔离模式,禁止用户在集群内配置自定义存储凭据,避免绕过UC权限管控直接访问存储
- 不建议在ADLS上给单个用户授予过大的目录级权限,遵循最小权限原则,仅给用户授予完成访问所需的最小范围权限即可
内容的提问来源于stack exchange,提问作者novice
相关产品推荐
相关产品推荐

