免责声明:本博客中表达的所有观点和意见均属 作者个人,不一定代表作者的雇主或任何其他团体或个人。本文 不是对任何云/数据管理平台的推广。所有图片和代码片段均可在Azure/Databricks网站上公开获取。
在本文中,我将提供自动化Unity Catalog模式级别权限管理的脚本。
Unity Catalog模式级别权限
Unity Catalog中的分层权限模型使用户能够在层次结构的任何级别应用权限,并且子对象会自动继承相同的权限。因此,如果在模式级别应用权限,它将自动应用于模式内的所有表、视图、卷和函数
。在Unity Catalog(Databricks)中,对模式级别的权限适用于您想要控制对特定模式内一组表和视图的访问权限的情况。通常会在以下情况下应用模式级别权限:
- 授予对象组的访问权限:如果您想要集体管理多个表和视图的权限,那么在模式级别应用权限比为每个表或视图单独应用权限更有效。这样可以同时控制对该模式内的所有对象的访问权限。
- 组织控制:当组织中的不同团队或部门需要访问存储在不同模式下的特定数据集时。应用模式级权限允许您授予或限制对该模式中团队相关的所有对象的访问权限。
- 一致的权限管理:对于经常向模式添加新对象(表/视图)的环境,通过在模式级别设置权限,可确保新对象自动继承权限,减少手动权限更新的需要。
- 维护数据安全:当您希望对逻辑上组织在模式下的特定数据集类别(例如财务数据、人力资源数据)强制执行访问控制时。通过在模式级别设置权限,您可以在简化管理的同时保持数据安全。
自动化脚本
先决条件
- Unity目录已设置。
- 负责人与Databricks工作区相关联。
- 运行权限脚本的用户在模式和目录上具有适当的权限。
步骤1:创建笔记本并声明变量
在Databricks工作区中创建一个笔记本。要在您的工作区中创建笔记本,请单击侧边栏中的“+”新建,然后选择笔记本。
复制并粘贴下面的代码片段到笔记本单元格中,并运行该单元格。
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
步骤2:设置目录和模式
复制、粘贴并运行以下代码块到一个新的或现有的单元格中,然后运行该单元格。
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
步骤3:循环遍历主体和权限并在目录和模式中应用授权
复制、粘贴并运行以下代码块到一个新的或现有的单元格中,然后运行该单元格以应用权限。
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Apply use catalog permission at Catalog level
spark.sql(query)
query = f"USE SCHEMA `{schema}`" # Sets the schema
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Apply use schema permission at Schema level
spark.sql(query)
for privilege in privileges:
query = f"GRANT `{privilege}` ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
验证
您可以通过打开 Databricks UI 并导航到数据资源管理器中的 目录 来验证权限。一旦目录出现在数据部分中,请单击目录,然后选择您已应用权限的模式并转到 权限 选项卡。现在您可以看到应用于模式的所有权限。
您也可以在笔记本中运行下面的 SQL 脚本,以显示模式的所有权限,作为验证的一部分。
SHOW GRANTS ON SCHEMA my_schema;
结论
在 Databricks Unity Catalog 中自动化权限管理在模式级别上有助于确保对目录中的对象组(例如表、视图、函数和卷)的一致且高效的访问控制。所提供的代码演示了分配模式级别权限的实际方法,使得更容易管理主体(例如用户和组)之间的权限。这种方法通过将表和视图分组到一个模式中并为整个模式应用一致的权限,从而减少了管理任务和手动错误的几率。
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-schema-level