仅限特定工作区能访问目录

本文介绍工作区目录绑定,并描述如何将 Unity Catalog 目录绑定到 Azure Databricks 工作区,以防止 Azure Databricks 帐户中的其他工作区访问。

什么是工作区-目录绑定?

如果你使用工作区来隔离用户数据访问,则可以限制为从帐户中的特定工作区访问目录(这也称为工作区-目录绑定)。 默认设置是与附加到当前元存储的所有工作区共享目录。

此默认设置的例外是为所有新工作区自动创建的工作区目录。 此工作区目录仅绑定到你的工作区,除非你选择向其他工作区授予对其的访问权限。 有关要取消绑定此目录时的权限分配的重要信息,请参阅从工作区取消绑定目录

你可以允许从工作区读取和写入目录,也可以指定只读访问权限。 如果指定只读,则会阻止从该工作区到该目录的所有写入操作。

将目录绑定到特定工作区的典型用例包括:

  • 确保用户只能从生产工作区环境访问生产数据。
  • 确保用户只能处理来自专用工作区的敏感数据。
  • 允许用户从开发人员工作区以只读方式访问生产数据,以便进行开发和测试。

注意

还可以将外部位置和存储凭据绑定到特定工作区,从而限制这些工作区中的特权用户访问外部位置中的数据。 请参阅(可选)将外部位置分配给特定工作区,以及(可选)向特定工作区分配存储凭据

工作区目录绑定示例

以生产和开发隔离为例。 如果指定只能从生产工作区访问生产数据目录,则会取代向用户颁发的任何单独授权。

目录-工作区绑定示意图

在此示意图中,prod_catalog 绑定到两个生产工作区。 假设已授予用户对 prod_catalog 中名为 my_table 的表的访问权限(使用 GRANT SELECT ON my_table TO <user>)。 如果该用户尝试访问 Dev 工作区中的 my_table,则会收到错误消息。 该用户只能从 Prod ETL 和 Prod Analytics 工作区访问 my_table

平台的所有区域都遵守工作区-目录绑定。 例如,如果你查询信息架构,则只会看到在发出查询的工作区中可访问的目录。 数据世系和搜索 UI 同样只显示分配到工作区的目录(无论是使用绑定还是默认设置)。

将目录绑定到一个或多个工作区

若要将目录分配到特定的工作区,可以使用目录资源管理器或 Databricks CLI。

所需的权限:元存储管理员或目录所有者。

注意

元存储管理员可以使用目录资源管理器查看元存储中的所有目录,目录所有者可以查看他们在元存储中拥有的所有目录,无论目录是否已分配到当前工作区。 未分配到工作区的目录将灰显,并且没有任何子对象可见或可供查询。

目录资源管理器

  1. 登录到链接到元存储的工作区。

  2. 单击 目录图标目录”。

  3. 在“目录”窗格的左侧,单击目录名称。

    目录资源管理器主窗格默认会显示“目录”列表。 你也可以在该列表中选择目录。

  4. 在“工作区”选项卡上,清除“所有工作区拥有访问权限”复选框。

    如果目录已绑定到一个或多个工作区,则此复选框已清除。

  5. 单击“分配到工作区”,然后输入或查找要分配的工作区

  6. (可选)将工作区访问权限限制为只读。

    在“管理访问级别”菜单上,选择“将访问权限更改为只读”

    随时都可通过编辑目录并选择“更改读取和写入权限”来反转此选择

若要撤销访问权限,请转到“工作区”选项卡,选择该工作区,然后单击“撤销”。

CLI

有两个 Databricks CLI 命令组,以及将目录分配给工作区所需的两个步骤。

在以下示例中,将 <profile-name> 替换为 Azure Databricks 身份验证配置文件的名称。 它应包括个人访问令牌的值,以及生成个人访问令牌的工作区的工作区实例名称和工作区 ID。 请参阅 Azure Databricks 个人访问令牌身份验证

  1. 使用 catalogs 命令组的 update 命令将目录的 isolation mode 设置为 ISOLATED

    databricks catalogs update <my-catalog> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    对于附加到元存储的所有工作区,默认的 isolation-mode 设置为 OPEN

  2. 使用 workspace-bindings 命令组的 update-bindings 命令将将工作区分配到目录:

    databricks workspace-bindings update-bindings catalog <my-catalog> \
    --json '{
      "add": [{"workspace_id": <workspace-id>, "binding_type": <binding-type>}...],
      "remove": [{"workspace_id": <workspace-id>, "binding_type": "<binding-type>}...]
    }' --profile <profile-name>
    

    使用 "add""remove" 属性添加或删除工作区绑定。 <binding-type> 可以是 “BINDING_TYPE_READ_WRITE”(默认值)或 “BINDING_TYPE_READ_ONLY”

若要列出目录的所有工作区分配,请使用 workspace-bindings 命令组的 get-bindings 命令:

databricks workspace-bindings get-bindings catalog <my-catalog> \
--profile <profile-name>

从工作区取消绑定目录

将目录绑定到一个或多个工作区中包含包括有关使用目录资源管理器或 workspace-bindings CLI 命令组撤销工作区对目录的访问权限的说明。

重要

如果自动为 Unity Catalog 启用了工作区且有了一个工作区目录,则工作区管理员仅在该工作区中拥有该目录及对该目录的所有权限。 如果取消绑定该目录或将其绑定到其他目录,则需要将任何必需的权限手动授予工作区管理员组中的各成员或使用帐户级组的成员,因为工作区管理员组是工作区本地组。 有关帐户组与工作区本地组的详细信息,请参阅帐户组与工作区本地组的区别