如何在Azure Databricks工作区级别获取管理员与非管理员权限
Azure Databricks工作区权限记录方案解答
1. 获取并记录权限的最有效方式
核心思路是结合系统视图(information schema)和REST API,分对象类型针对性处理:
- 表、视图、数据库等数据对象:直接用
information_schema下的系统视图查询,比如table_privileges、database_privileges,能覆盖管理员和非管理员的权限(启用Unity Catalog后,用system.information_schema下的视图更全面)。 - 作业、集群、笔记本、工作区文件夹等非数据对象:必须通过Databricks REST API的权限端点获取,比如
/api/2.0/permissions/jobs、/api/2.0/permissions/clusters、/api/2.0/workspace/permissions。推荐用Databricks CLI或Python SDK(databricks-sdk)批量调用API,避免手动逐个操作。 - 数据整合:把系统视图的查询结果和API返回的JSON数据统一转换成结构化格式(比如DataFrame),再合并存储到Delta表、CSV文件等持久化位置。
2. 内置工具或查询
有几种现成的工具和查询可直接使用:
- 系统视图查询:
- 查询表权限:
SELECT table_catalog, table_schema, table_name, grantee, privilege_type, is_grantable FROM information_schema.table_privileges - 查询数据库权限:
SELECT catalog_name, schema_name, grantee, privilege_type, is_grantable FROM information_schema.schema_privileges
- 查询表权限:
- Databricks CLI权限命令:批量导出权限,比如导出指定作业的权限:
也可以先用databricks permissions get --object-type jobs --object-id <job-id>databricks jobs list获取所有作业ID,再循环调用权限命令批量导出。 - Admin Console界面:工作区Admin Console的
Permissions板块可查看部分对象的权限,但批量导出仍需依赖API或CLI。 - Unity Catalog权限视图:若启用了Unity Catalog,
system.access_control下的effective_permissions等视图能展示跨目录、架构、表的有效权限,涵盖所有用户/组的权限信息。
3. 报告结构化的推荐实践
结构化数据要兼顾可读性和可分析性,推荐这些做法:
- 按对象类型分组:将报告划分为「数据对象(表/库)」「计算对象(集群/作业)」「工作区对象(笔记本/文件夹)」等模块,每个模块单独展示权限。
- 统一核心字段:每个权限条目包含以下关键字段:
- 对象类型、对象ID、对象名称
- 权限主体(用户名/组名)
- 权限类型(如
SELECT、MODIFY、RUN) - 是否为管理员权限(可通过判断主体是否属于管理员组或拥有
ALL PRIVILEGES标记) - 权限来源(直接授予/继承)
- 用表格呈现核心数据:例如:
| 对象类型 | 对象名称 | 权限主体 | 权限类型 | 是否管理员权限 |
|---|---|---|---|---|
| 表 | sales_db.order | user1@xxx.com | SELECT | 否 |
| 集群 | Cluster-01 | admin_group | ALL PRIVILEGES | 是 |
- 添加元数据:在报告开头标注数据采集时间、工作区ID,方便后续追溯。
- 分层展示权限:对于有层级关系的对象(如文件夹下的笔记本),用缩进或树形结构展示权限继承关系。
- 可视化辅助:若需分享给非技术人员,可通过Databricks Dashboard制作权限分布图表(如不同用户的权限类型占比)。
内容的提问来源于stack exchange,提问作者LearnIt
相关产品推荐
相关产品推荐

