Unity Catalog最佳实践
本文档提供了一个关于如何最好地采用Databricks Unity Catalog和Delta Sharing来满足您的数据治理需求的观点。
配置一个Unity Catalog metastore
Unity Catalog是Databricks Lakehouse上的数据和AI的细粒度治理解决方案。它通过提供一个管理和审计数据访问的中心位置,帮助简化数据的安全性和治理。下图展示了Unity Catalog中的主要安全对象:
metastore是Unity Catalog中对象的顶级容器。它存储数据资产(表和视图)以及控制对它们的访问的权限。Databricks帐户管理员可以创建亚metastore并将其分配给Databricks工作区,以控制哪些工作负载使用每个亚metastore。您可以在操作的每个区域中创建单个亚矿,并将其链接到该区域中的所有工作空间。因此,如果你有多个使用Databricks的区域,你就会有多个亚metastores。若要在亚metastore之间共享数据,请参见三角洲分享.
每个metastore都配置了一个根存储位置,用于托管表。您需要确保没有用户可以直接访问这个存储位置。提供对存储位置的访问可以允许用户绕过Unity Catalog metastore中的访问控制,并破坏可审计性。由于这些原因,您不应该重用当前DBFS根文件系统或以前是DBFS根文件系统的桶作为Unity Catalog metastore中的根存储位置。
看到创建一个Unity Catalog metastore.
外部位置和存储凭证
外部位置和存储凭证允许Unity Catalog代表用户在云租户上读取和写入数据。
一个存储凭证封装提供对云存储访问的长期云凭据。例如,在AWS中,可以配置IAM角色访问S3桶。
一个外部位置是一个对象,它将云存储路径与存储凭据组合在一起,以便授权对云存储路径的访问。
Databricks建议使用外部位置,而不是直接使用存储凭证。您应该确保有限数量的用户可以直接访问作为外部位置使用的桶。这是为了限制用户绕过Unity Catalog metastore中的访问控制并破坏可审计性。由于这些原因,不应该将存储帐户挂载到用作外部位置的DBFS。
Databricks建议将云存储位置上的挂载迁移到Unity Catalog内的外部位置数据浏览.
看到管理外部位置和存储凭证.
整理你的数据
Databricks建议使用目录在组织的信息体系结构中提供隔离。这通常意味着目录可以对应于软件开发环境范围、团队或业务单元。
模式(也称为数据库)是Unity Catalog的第二层三级名称空间并组织表和视图。表可以是管理的,也可以是外部的。
托管表是在Unity Catalog中创建表的默认方式。这些表存储在创建metastore时配置的Unity Catalog根存储位置中。Databricks建议尽可能使用托管表,以确保支持Unity Catalog功能。所有托管表都使用Delta Lake。
外部表是其数据存储在托管存储位置之外的存储位置中的表。它们并不完全由Unity Catalog管理。外部表支持Delta Lake和许多其他数据格式,包括Parquet、JSON和CSV。外部表是提供对原始数据的直接访问的好选择。
有关创建表的详细信息,请参见创建表.
管理外部位置和外部表
下图表示单个云存储桶的文件系统层次结构。
创建了四个外部位置,它们都使用一个存储凭据。用户和组可以被授予访问Unity Catalog metastore中不同存储位置的权限。这允许您为特定的组提供对云存储桶的不同部分的访问。
您可以使用Unity Catalog metastore中的存储位置创建外部表。然后,这些外部表可以独立地进行保护。Databricks建议从一个模式中的一个存储位置创建外部表。
Databricks强烈不建议将公共表注册为多个metastore中的外部表,因为存在一致性问题的风险。例如,在一个亚矿中对模式的更改将不会在第二个亚矿中登记。使用Delta Sharing在metastore之间共享数据。看到三角洲分享.
配置访问控制
Unity Catalog中的每个安全对象都有一个所有者。创建对象的主体成为对象的初始所有者。对象的所有者拥有该对象上的所有特权,例如表上的SELECT和MODIFY,以及将可安全对象上的特权授予其他主体的权限。只有可安全对象的所有者才有权将该对象上的特权授予其他主体。类的所有对象的所有权配置是最佳实践集团负责项目上的经费管理。所有者和metastore管理员都可以将安全对象的所有权转移到组。此外,如果对象包含在编目(如表或视图)中,编目和模式所有者可以更改对象的所有权。
Unity Catalog中的安全对象是分层的,权限向下继承。这意味着在编目或模式上授予特权会自动将特权授予编目或模式中的所有当前和未来对象。有关更多信息,请参见继承模型.
为了从表或视图中读取数据,用户必须具有以下权限:
选择
在表或视图上使用模式
在拥有该表的模式上使用目录
在拥有模式的目录上
使用目录
使受让人能够遍历目录以访问其子对象和使用模式
允许被授予人遍历模式以访问其子对象。例如,要从表中选择数据,用户需要具有选择
那张桌子上的特权使用目录
的父目录上的特权使用模式
它的父模式上的特权。因此,您可以使用此特权限制特定组对数据名称空间部分的访问。一个常见的场景是为每个团队建立一个只有该团队拥有的模式使用模式
而且创建
在模式上。这意味着团队成员生成的任何表只能在团队内部共享。
你可以使用下面的SQL语法来保护对表的访问:
格兰特使用目录在目录<catalog_name>来<group_name>;格兰特使用模式在模式<catalog_name>.<schema_name>来<group_name>;格兰特选择在<catalog_name>.<schema_name>.<table_name>;来<group_name>;
你可以在辅助模式中使用动态视图来保护对列的访问,如下面的SQL语法所示:
创建视图<catalog_name>.<schema_name>.<view_name>作为选择id,情况下当is_member(<group_name>)然后电子邮件其他的“修订”结束作为电子邮件,国家,产品,总计从<catalog_name>.<schema_name>.<table_name>;格兰特使用目录在目录<catalog_name>来<group_name>;格兰特使用模式在模式<catalog_name>.<schema_name>.<view_name>;来<group_name>;格兰特选择在<catalog_name>.<schema_name>.<view_name>;来<group_name>;
你可以在二级模式中使用动态视图保护对行的访问,如下面的SQL语法所示:
创建视图<catalog_name>.<schema_name>.<view_name>作为选择*从<catalog_name>.<schema_name>.<table_name>在哪里情况下当is_member(经理)然后真正的其他的总计< =1000000结束;格兰特使用目录在目录<catalog_name>来<group_name>;格兰特使用模式在模式<catalog_name>.<schema_name>.<table_name>;来<group_name>;格兰特选择在<catalog_name>.<schema_name>.<table_name>;来<group_name>;
管理集群配置
Databricks建议使用集群策略来限制基于一组规则配置集群的能力。集群策略允许你只创建支持Unity catalog的集群。使用集群策略减少了可用的选择,这将极大地简化用户的集群创建过程,并确保他们能够无缝地访问数据。集群策略还允许您通过限制每个集群的最大成本来控制成本。
为了确保访问控制的完整性并实施强大的隔离保证,Unity Catalog对计算资源提出了安全要求。因此,Unity Catalog引入了集群访问模式的概念。Unity目录默认是安全的;如果集群没有配置适当的访问模式,则集群不能访问Unity Catalog中的数据。看到Unity目录的集群访问模式.
Databricks建议在共享集群时使用“用户隔离”访问模式,对于自动化作业和机器学习工作负载使用“单用户”访问模式。
下面的JSON提供了具有用户隔离安全模式的共享集群的策略定义:
{“spark_version”:{“类型”:“正则表达式”,“模式”:“1 (0 - 1)\ \ [0 - 9]* \ \ .x-scala。*”,“defaultValue”:“10.4.x-scala2.12”},“access_mode”:{“类型”:“固定”,“价值”:“USER_ISOLATION”,“隐藏”:真正的}}
下面的JSON提供了具有单用户安全模式的自动化作业集群的策略定义:
{“spark_version”:{“类型”:“正则表达式”,“模式”:“1(0 - 1)\ \[0 - 9]*”。,“defaultValue”:“10.4.x-scala2.12”},“access_mode”:{“类型”:“固定”,“价值”:“SINGLE_USER”,“隐藏”:真正的},“single_user_name”:{“类型”:“正则表达式”,“模式”:“。*”,“隐藏”:真正的}}
审计访问
一个完整的数据治理解决方案需要审计对数据的访问,并提供警报和监视功能。Unity Catalog捕获针对metastore执行的操作的审计日志,这些日志作为Databricks审计日志的一部分交付。
确保你配置审计日志记录.这涉及到配置正确的访问策略,以便Databricks可以将审计日志发送到您提供的S3桶。审计日志一般记录在15分钟内。Databricks建议为帐户中的所有工作区共享相同的审计日志配置。
看到使用审计日志监视您的Databricks Lakehouse平台bob体育客户端下载有关如何获得与Databricks Lakehouse平台相关的关键事件的完整可见性的详细信息。bob体育客户端下载
三角洲分享
三角洲分享是Databricks开发的一种开放协议,用于与您组织内的其他组织或其他部门安全地共享数据,而不管他们使用哪种计算平台。bob体育客户端下载当Delta Sharing在metastore上启用时,Unity Catalog运行一个Delta Sharing服务器。
要在亚metastore之间共享数据,您可以利用数据对数据的增量共享.这允许您从不同区域的亚metastore注册表。这些表将作为只读对象出现在消费亚存储中。这些表可以像Unity Catalog中的任何其他对象一样被授予访问权限。
当您使用databrick -to- databricks Delta Sharing在metastore之间进行共享时,请记住访问控制仅限于一个metastore。如果一个可安全的对象(如表)上有授权,并且该资源共享给帐户内的metastore,那么来自源的授权将不适用于目标共享。目的地份额必须设定自己的赠款。