管理 Postgres 角色

重要

此功能在以下区域中为公共预览版westuswestus2eastuseastus2centralussouthcentralusnortheuropewesteuropeaustraliaeastbrazilsouthcanadacentralcentralindiasoutheastasiauksouth

会自动为 Lakebase 数据库实例所有者的 Azure Databricks 身份创建一个 Postgres 角色。

最初,只有实例的所有者才能通过 Postgres 登录和访问实例。 若要允许其他 Azure Databricks 标识登录到数据库实例,Azure Databricks 标识必须具有相应的 Postgres 角色。

本页介绍如何在 PostgreSQL 中添加和管理其他基于 Azure Databricks 标识的角色。

创建 Postgres 角色并为 Azure Databricks 标识授予权限

使用 Azure Databricks UI 或 PostgreSQL 查询创建 Postgres 角色。

注释

角色管理操作受到对数据库实例授予的权限控制。 在尝试管理角色之前,请确保具有适当的访问权限级别。

UI

对数据库实例具有 CAN USE 权限的用户可以查看与 Azure Databricks 标识关联的现有 Postgres 角色,或为其自己的标识添加角色。

拥有 CAN MANAGE 权限的用户可以为其他 Azure Databricks 标识创建角色,包括附加权限,还可以删除任何 Azure Databricks 标识的角色。

可以在 “数据库实例 概述”页中向任何所需用户、组或服务主体分配其他权限。

  1. 在工作区边栏中单击 “计算 ”。

  2. 单击 “数据库实例”。

  3. 单击“权限”选项卡。

  4. 在右上角单击添加 PostgreSQL 角色

  5. 对于 工作区标识,请输入用户、组或服务主体,然后选择 Azure Databricks 标识。 你必须选择一个 Azure Databricks 身份,该身份在实例中尚未具有 Postgres 角色。

  6. 选择 角色成员身份。 如果对数据库实例具有CAN MANAGE权限,则可以向角色添加成员身份databricks_superuser并启用某些角色属性。

  7. 选择要授予新角色的 PostgreSQL 属性。

    • CREATEDB:授予创建新数据库的权限
    • CREATEROLE:授予创建新角色的权限
    • BYPASS RLS:授予绕过实例中所有行级别安全性的权限
  8. 单击“确认”。

PostgreSQL

创建新的 Postgres 角色之前,请验证是否满足以下要求:

  • 你需要拥有数据库上的CREATECREATE ROLE权限。
  • 必须以 Azure Databricks 标识(用户、服务主体或组)身份进行身份验证并登录到 Postgres。 本机 Postgres 经过身份验证的会话无法创建 Azure Databricks 角色。
  • 身份验证令牌必须在创建角色时有效且未过期。

使用该 databricks_create_role 函数添加和创建基于 Azure Databricks 标识的 PostgreSQL 角色。 自定义 PostgreSQL 扩展 databricks_auth 提供 databricks_create_role 函数。

  1. 创建databricks_auth扩展。 每个 Postgres 数据库必须有自己的扩展。

    CREATE EXTENSION IF NOT EXISTS databricks_auth;
    
  2. 使用该 databricks_create_role 函数为 Azure Databricks 标识添加和创建新的 Postgres 角色。 角色不得已存在。 如果存在同名角色,请先将其删除,然后再创建基于 Azure Databricks 标识的角色。

    SELECT databricks_create_role('identity_name', 'identity_type');
    

    参数identity_nameidentity_type取决于 Azure Databricks 标识类型:

    • Azure Databricks 用户:

      • identity_name:用户的电子邮件,例如 myuser@databricks.com
      • identity_type:USER
      SELECT databricks_create_role('myuser@databricks.com','USER');
      
    • Azure Databricks 服务主体:

      • identity_name:服务主体的应用程序 ID,例如 8c01cfb1-62c9-4a09-88a8-e195f4b01b08
      • identity_type:SERVICE_PRINCIPAL
      SELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08','SERVICE_PRINCIPAL');
      
    • Azure Databricks 组:

      • identity_name:组名(区分大小写):My Group 123
      • identity_type:GROUP
      SELECT databricks_create_role('My Group 123','GROUP');
      
  3. 使用 databricks_create_role 创建的角色在创建后只具有被授予给 PUBLIC 的权限。 若要授予或撤销其他权限,请使用标准的 Postgres 特权管理命令 GRANTREVOKE

    授予角色读取权限来访问表。

    GRANT SELECT ON "my_schema"."my_table" TO <role-name>;
    

    从角色中删除对表的写入访问权限。

    REVOKE INSERT, UPDATE, DELETE ON TABLE "my_schema"."my_table" FROM <role-name>;
    

    从角色撤消对数据库的所有访问权限。

    REVOKE CONNECT ON DATABASE "example_database" FROM <role-name>;
    

查看 Azure Databricks 标识角色

UI

可以在数据库实例概述页中查看哪些用户、组和服务主体具有相应的 Postgres 角色。

  1. 在工作区边栏中单击 “计算 ”。
  2. 单击 “数据库实例”。
  3. 单击“权限”选项卡。

PostgreSQL

通过 PostgreSQL 查询列出默认情况下创建的所有 Azure Databricks 标识角色,然后在使用 databricks_create_role 函数时,在 databricks_list_roles 扩展中使用 databricks_auth 函数。 这会列出添加的所有 Azure Databricks 用户、服务主体和组,以作为 Postgres 角色进行身份验证。

CREATE EXTENSION IF NOT EXISTS databricks_auth;
SELECT * from databricks_list_roles;

删除基于 Azure Databricks 标识的 Postgres 角色

UI

删除角色后无法恢复。 可以重新创建角色,但任何对象所有权重新分配都是不可逆的,无需删除拥有重新分配对象的新角色。

  1. 在工作区边栏中单击 “计算 ”。
  2. 单击 “数据库实例”。
  3. 单击“权限”选项卡。
  4. 对于要删除的角色标识,请在最右侧单击“Kebab”菜单图标。
  5. 单击“ 删除角色”。
  6. 如果需要删除拥有对象的角色,请打开 “重新分配拥有的对象”。 这会将所有可重新分配的自有对象(数据库、架构和表)重新分配给其他角色,然后删除任何不可重新分配的自有对象。
  7. 单击“确认”。

PostgreSQL

可以像删除任何其他 Postgres 角色一样,删除和移除基于 Azure Databricks 标识的 Postgres 角色。 有关更多详细信息,请参阅 有关删除角色的 PostgreSQL 文档。 删除基于 Azure Databricks 标识的角色后,它不能用于基于令牌的身份验证和访问 Postgres。