关键概念

重要

Unity Catalog 目前为公共预览版。 要使用该预览版,请联系 Azure Databricks 代表。

本文介绍 Unity Catalog 在 Lakehouse 中引入安全性和治理的方式的关键概念。

帐户级标识

Unity Catalog 使用 Databricks 中的帐户级标识系统来解析用户和组并强制执行权限。 可以直接在 Databricks 帐户控制台中配置用户和组。 在 Unity Catalog 中创建访问控制策略时,请参阅这些帐户级用户和组。

尽管 Databricks 还允许将本地组添加到工作区,但这些本地组不能在 Unity Catalog 中使用。 引用本地组的命令返回“找不到该组”错误。

此外,还必须将 Unity Catalog 用户添加到工作区,以访问 Notebook、Databricks SQL 查询、Databricks SQL 数据资源管理器或 REST API 命令中的 Unity Catalog 数据,并将 Unity Catalog 数据与工作区本地数据联接起来。

数据权限

在 Unity Catalog 中,默认情况下数据是安全的。 最初,用户无权访问元存储中的数据。 元存储管理员和对象所有者可以使用 Databricks SQL 数据资源管理器或 SQL 命令管理对象权限。

若要了解详细信息,请参阅数据权限

对象模型

下图显示了 Unity Catalog 中的主要安全对象:

Unity Catalog 对象模型图

注意

图中未显示某些对象,例如外部位置和存储凭据。 这些对象位于与目录同一级别的元存储中。

元存储

元存储是 Unity Catalog 中对象的顶级容器。 它存储数据资产(表和视图),以及用于管理对数据资产的访问的权限。 Databricks 帐户管理员可以创建元存储并将其分配给 Databricks 工作区,以控制哪些工作负载可使用所有元存储。

注意

Unity Catalog 提供了一个具有内置安全性和审核功能的新元存储。 它与旧版 Databricks 中使用的元存储不同,后者基于 Hive 元存储。

元存储管理员

元存储管理员可以管理元存储中所有安全对象的权限,例如谁可以创建目录或查询表。

注意

有关 Unity Catalog 的数据治理模型的详细信息,请参阅数据权限

如有必要,元存储管理员可以通过更改对象的所有权将元存储对象的权限管理委托给其他用户或组。 创建元存储的帐户级管理员是元存储的所有者。 对象的一个所有者或多个所有者(如果该对象由组拥有)可以将该对象及其派生对象的权限授予其他人。

初始帐户级管理员(必须在 Azure 租户的根管理组中具有参与者角色)可以使用 Azure Databricks 帐户控制台为其他用户启用管理员角色。 这些帐户管理员是元存储管理员。

创建元存储的帐户管理员是其初始元存储管理员。帐户管理员可以通过更改元存储的所有者将其他用户指定为元存储管理员。 帐户管理员始终可以管理元存储,无需考虑元存储的所有者。

工作区管理员

无论是否为工作区配置了 Unity Catalog,工作区管理员都可以管理用户、作业和笔记本等工作区对象。 换句话说,如果工作区已配置为使用 Unity Catalog,工作区管理员仍然可以管理工作区对象。 尽管工作区管理员无法像元存储管理员那样管理对存储在 Unity Catalog 中的数据的访问,但他们确实能够执行工作区管理任务(例如将用户和服务主体添加到工作区),并且他们可以查看和修改作业与笔记本等工作区对象。 这可能会提供对 Unity Catalog 中注册的数据的访问权限。 因此,工作区管理员仍然是应仔细分配的特权角色。

默认存储位置

每个元存储均配置为 Azure 存储帐户中的默认存储位置。 这是托管表中数据的默认存储位置。 外部表将数据存储在其他存储路径中。

为代表用户访问默认存储位置,Unity Catalog 使用创建元存储时配置的根存储凭据。 根存储凭据包含服务主体的客户端密码,该服务主体具有默认存储位置的 Azure Blob 参与者角色。 可以创建使用单独服务主体的其他外部凭据,但元存储的根存储凭据仍用于将元数据写入元存储。 用户代码永远不会获得对存储凭据的完全访问权限。 Unity Catalog 则会生成范围访问令牌,以允许每个用户或应用程序访问请求的数据。

目录

目录是 Unity Catalog 的三级命名空间的第一层,用于组织数据资产。 用户可以查看分配了USAGE数据权限的所有目录。

架构

架构(又称数据库)是 Unity Catalog 三级命名空间的第二层,用于组织表和视图。 若要访问或列出架构中的表或视图,用户必须拥有对架构及其父目录的 USAGE 数据权限,以及对表或视图的 SELECT 权限。

表位于 Unity Catalog 的三级命名空间的第三层,且包含数据行。 若要创建表,用户必须对架构具有 CREATEUSAGE 权限,并对其父目录具有 USAGE 权限。 若要查询表,用户必须对表具有 SELECT 权限,并对其父架构和目录具有 USAGE 权限。

表可以是托管表,也可以是外部表。

托管表

托管表是在 Unity Catalog 中创建表的默认方式。 这些表存储在创建每个元存储时配置的托管存储位置。

  • 若要创建托管表,请运行不带 LOCATION 子句的 CREATE TABLE 命令。
  • 若要删除托管表,请使用 DROP TABLE 语句。

删除托管表时,将从云租户中删除其基础数据。 托管表唯一支持的格式是增量。

示例语法:

CREATE TABLE <example-table>(id STRING, value STRING)

外部表

外部表是其数据存储在托管存储位置之外的存储位置,并且未由 Unity 目录完全管理的表。 在外部表上运行 DROP TABLE 时,Unity Catalog 不会删除基础数据。 你可以管理外部表的权限,并以与托管表相同的方式在查询中使用它们。 要创建外部表,请在 CREATE TABLE 语句中指定 LOCATION 路径。 外部表可以使用以下文件格式:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARQUET
  • ORC
  • TEXT

为了管理对外部表的基础云存储的访问,Unity Catalog 引入了两种新的对象类型:存储凭据和外部位置。

  • 存储凭据表示一种身份验证和授权机制,这种机制访问存储在云租户上的数据,例如服务主体的客户端密码。 每个存储凭据都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问该凭据。

如果用户尝试引用和使用尚未获得 USAGE 权限的存储凭据,则请求将失败,并且 Unity Catalog 不会尝试代表用户向云租户进行身份验证。

  • 外部位置是包含对存储凭据和云存储路径的引用的对象。 外部位置仅授予对该路径及其子目录和文件的访问权限。 每个外部位置都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问凭据。

    如果用户尝试使用尚未获得 USAGE 权限的外部位置,则请求将失败,并且 Unity Catalog 不会尝试代表用户向云租户进行身份验证。

只有元存储管理员可以创建和授予对存储凭据和外部位置的权限。

示例语法:

CREATE TABLE <example-table>
(id STRING, value STRING)
USING delta
LOCATION "abfss://<your-storage-path>"

注意

用户必须拥有对外部位置或存储凭据的 CREATE TABLE 权限,以授予对 CREATE TABLE 语句中指定的 LOCATION 的访问权限,然后用户才能够创建外部表。

视图

视图位于 Unity Catalog 的三级命名空间的第三层,是由元存储中的一个或多个表和视图组成的只读对象。 视图可由多个架构或目录中的表和视图组成。

示例语法:

CREATE VIEW main.default.experienced_employee
  (id COMMENT 'Unique identification number', Name)
  COMMENT 'View for experienced employees'
AS SELECT id, name
   FROM all_employee
   WHERE working_years > 5;

群集安全模式

为确保访问控制的完整性并强制执行强大的隔离保证,Unity Catalog 对计算资源提出了一些安全要求。 为此,Unity Catalog 引入了群集的安全模式概念。 Unity Catalog 默认是安全的;如果群集未配置适当的安全模式,则群集无法访问 Unity Catalog 中的数据。

注意

如果将工作区分配给 Unity Catalog 元存储,则使用安全模式(而不是高并发群集)以确保访问控制的完整性并强制实施强隔离保证。 高并发群集模式不适用于 Unity Catalog。

创建数据科学与工程或 Databricks 机器学习群集时,可以从以下群集安全模式中进行选择:

  • :无隔离。 不强制执行工作区本地表访问控制或凭据传递。 无法访问 Unity Catalog 数据。
  • 单一用户:只能由单一用户(默认为创建群集的用户)使用。 其他用户无法附加到群集。 从单一用户安全模式下的群集访问视图时,视图按该用户的权限运行。 单一用户群集支持使用 Python、Scala 和 R 的工作负载。单一用户群集支持初始化脚本、库安装程序和 DBFS FUSE 装载。 自动化作业应使用单一用户群集。
  • 用户隔离:可以由多个用户共享。 仅支持 SQL 工作负载。 禁用库安装程序、初始化脚本和 DBFS FUSE 装载,以强制执行群集用户之间的严格隔离。
  • 仅限表 ACL(旧式):强制执行工作区本地表访问控制,但无法访问 Unity Catalog 数据。
  • 仅限传递(旧式):强制执行工作区本地凭据传递,但无法访问 Unity Catalog 数据。

Unity Catalog 工作负载支持的安全模式只有“单一用户”和“用户隔离”。

Databricks SQL 终结点自动使用“用户隔离”,无需配置。

可以升级现有群集以满足 Unity Catalog 的要求,方法是将其群集安全模式设置为“单一用户”或“用户隔离”安全模式。

下表介绍为每个群集安全模式启用和禁用的功能。

注意

下表为宽表。 可能需要在浏览器中横向滚动才能查看所有列。

安全模式 支持的语言 Unity Catalog 旧式表访问控制 凭据直通身份验证 多用户 RDD API DBFS FUSE 装载 初始化脚本和库安装程序 Unity Catalog 动态视图 用于机器学习的 Databricks Runtime
全部 𝙓 𝙓 𝙓 𝙓
单一用户 All 𝙓 𝙓 𝙓 𝙓
用户隔离 SQL 𝙓 𝙓 𝙓 𝙓 𝙓
旧式表 ACL SQL、Python 𝙓 𝙓 𝙓 𝙓 𝙓 𝙓
旧式传递 SQL、Python 𝙓 𝙓 𝙓 𝙓