工作区与目录绑定

在 Unity 目录中,默认情况下可从附加到同一元存储的任何工作区访问所有目录。 通过工作区目录绑定,可以重写此默认值,将目录限制为一个或多个特定工作区。 拒绝未绑定工作区的访问,即使用户在目录上具有显式权限授予也是如此。

为什么使用工作区与目录绑定

组织和符合性要求通常指定某些数据必须仅在指定环境中保持可访问性。 可能还需要:

  • 将生产数据与开发或测试环境隔离。
  • 防止某些数据域联接在一起。
  • 确保只能在特定工作区中处理敏感数据。

在Azure Databricks中,工作区是主要数据处理环境,目录是主数据域。 工作区目录绑定连接这两个概念,让目录所有者和具有 MANAGE 特权的用户定义哪些工作区可以访问哪些目录。

工作区目录绑定的工作原理

将目录绑定到特定工作区时,只有分配的工作区可以访问目录。 任何不在分配列表中的工作区,当用户尝试访问目录时,都会收到错误,这将覆盖任何授予这些用户的个人权限。

目录-工作区绑定示意图

在此示意图中,prod_catalog 绑定到两个生产工作区。 即使用户持有对SELECT表中的prod_catalog授权,他们也无法从 Dev 工作区访问该表。

只读访问

将目录绑定到工作区时,可以选择将该工作区限制为只读访问权限。 从该工作区到目录的所有写入操作已被阻止。

默认工作区目录行为

默认打开行为的例外是为所有新工作区自动创建 的默认工作区目录 。 默认情况下,此工作区目录仅绑定到自己的工作区。 如果取消绑定此目录或扩展对其他工作区的访问权限,则必须手动授予任何所需权限,因为工作区管理员组是工作区本地的,不能跨工作区使用。

平台整体执行

在整个平台上一致地强制执行工作区-目录绑定:

  • 信息架构查询仅返回当前工作区中可访问的目录。
  • 数据世系和目录资源管理器仅显示分配给当前工作区的目录。

可绑定到工作区的内容

工作区绑定适用于目录以外的内容。 您还可以绑定以下内容:

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

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

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

注释

无论目录是否分配给当前工作区,元存储管理员可以查看元存储中的所有目录,目录所有者可以查看他们在元存储中拥有的所有目录。 未分配给工作区的目录显示为灰色,并且子对象不可见或不可查询。

目录资源管理器

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

  2. 单击 “数据”图标。目录

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

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

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

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

  5. 单击分配到工作区,并输入或查找要分配的工作区。

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

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

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

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

CLI

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

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

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

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

    对于连接到元存储的所有工作区,默认 isolation-modeOPEN

  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 命令组撤消对目录的访问权限的说明包含在 将目录绑定到一个或多个工作区中。

Important

如果工作区已自动为 Unity 目录启用,并且你拥有默认的工作区目录,则工作区管理员拥有该目录,并且 仅对该工作区中的该目录拥有所有权限。 如果解除绑定该目录或将其绑定至其他目录,则必须手动将所需的权限分配给工作区管理员组的成员,或通过使用帐户级组进行分配,因为工作区管理员组是仅限于特定工作区的本地组。 有关帐户组与工作区本地组的详细信息,请参阅 组源