通过


创建 Postgres 角色

重要

Lakebase 自动缩放在以下区域处于 Beta 版本:eastus2westeuropewestus

Lakebase 自动缩放是最新版本的 Lakebase,可自动缩放计算、缩放到零、分支和即时还原。 有关 与 Lakebase 预配的功能比较,请参阅 在版本之间进行选择

创建项目时,Lakebase 会在项目中创建多个 Postgres 角色:

  • 项目所有者的 Azure Databricks 标识(例如 user@databricks.com)对应的 Postgres 角色,该角色拥有默认的 databricks_postgres 数据库。
  • 管理 databricks_superuser 角色

数据库 databricks_postgres 已创建,因此可以在创建项目后立即连接并试用 Lakebase。

还会创建多个系统管理角色。 这些内部角色由 Azure Databricks 服务用于管理、监控和数据操作。

注释

Postgres 角色控制 数据库访问 (谁可以查询数据)。 有关 项目权限 (谁可以管理基础结构),请参阅 项目权限。 有关设置这两者的教程,请参阅 教程:授予项目和数据库对新用户的访问权限

请参阅 预创建的角色系统角色

创建 Postgres 角色

Lakebase 支持两种类型的 Postgres 角色进行数据库访问:

  • Azure Databricks 标识的 OAuth 角色: 可以使用 databricks_auth 扩展和 SQL 创建这些角色。 允许 Azure Databricks 标识(用户、服务主体和组)使用 OAuth 令牌进行连接。
  • 原生 Postgres 密码角色:可以使用 Lakebase UI 或 SQL 创建。 将任何有效的角色名称用于密码身份验证。

有关选择要使用的角色类型的指南,请参阅 身份验证概述。 每个方案都针对不同的用例而设计。

使用 SQL 为 Azure Databricks 标识创建 OAuth 角色

若要允许 Azure Databricks 标识(用户、服务主体或用户组)使用 OAuth 令牌进行连接,您必须使用 databricks_auth 扩展来创建他们的 Postgres 角色。 为组创建角色可使所有组成员使用组角色进行身份验证,从而简化权限管理。

有关在用户到计算机流和计算机到计算机流中获取 OAuth 令牌的详细说明,请参阅身份验证文档中 的“在用户到计算机流中获取 OAuth 令牌 ”,并在 计算机到计算机流中获取 OAuth 令牌

先决条件

  • 你必须对数据库拥有 CREATECREATE ROLE 权限
  • 您必须使用有效的 OAuth 令牌对 Azure Databricks 身份进行认证。
  • 本机 Postgres 经过身份验证的用户会话无法创建 OAuth 角色

创建 OAuth 角色:

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

    CREATE EXTENSION IF NOT EXISTS databricks_auth;
    
  2. 使用 databricks_create_role 函数为 Azure Databricks 标识创建 Postgres 角色:

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

    对于 Azure Databricks 用户:

    SELECT databricks_create_role('myuser@databricks.com', 'USER');
    

    对于 Azure Databricks 服务主体:

    SELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08', 'SERVICE_PRINCIPAL');
    

    对于 Azure Databricks 组:

    SELECT databricks_create_role('My Group Name', 'GROUP');
    

    组名称区分大小写,必须与 Azure Databricks 工作区中显示的组名称完全匹配。 为组创建 Postgres 角色时,Databricks 组的任何直接或间接成员(用户或服务主体)都可以使用其单个 OAuth 令牌向 Postgres 进行身份验证作为组角色。 这样,你可以在 Postgres 中的组级别管理权限,而不是维护单个用户的权限。

  3. 向新创建的角色授予数据库权限。

databricks_create_role() 函数仅创建具有权限的 LOGIN Postgres 角色。 创建角色后,必须授予用户访问的特定数据库、架构或表的相应数据库特权和权限。 了解如何: 管理权限

基于组的身份验证

为 Azure Databricks 组创建 Postgres 角色时,启用基于组的身份验证。 这样,Azure Databricks 组的任何成员就可以使用组的角色向 Postgres 进行身份验证,从而简化权限管理。

工作原理

  1. 使用 databricks_create_role('Group Name', 'GROUP').. 为 Databricks 组创建 Postgres 角色。
  2. 向 Postgres 中的组角色授予数据库权限。 请参阅 “管理权限”。
  3. Databricks 组的任何直接或间接成员(用户或服务主体)都可以使用其单独的 OAuth 令牌连接到 Postgres。
  4. 连接时,成员将作为组角色进行身份验证,并继承授予该角色的所有权限。

身份验证流:

组成员连接时,将组的 Postgres 角色名称指定为用户名,并将自己的 OAuth 令牌指定为密码:

export PGPASSWORD='<OAuth token of a group member>'
export GROUP_ROLE_NAME='<pg-case-sensitive-group-role-name>'

psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUP_ROLE_NAME

重要注意事项:

  • 组成员身份验证: 仅在身份验证时验证组成员身份。 如果在建立连接后从 Azure Databricks 组中删除了成员,则连接将保持活动状态。 已删除成员的连接尝试将被拒绝。
  • 工作区范围: 仅支持在与项目相同的 Azure Databricks 工作区中分配的组进行基于组的认证。 若要了解如何将组分配到工作区,请参阅 “管理组”。
  • 区分大小写: 您在 databricks_create_role() 使用的组名称必须与 Azure Databricks 工作区中显示的组名称完全一致,包括大小写。
  • 权限管理: 在 Postgres 中的组级别管理权限比管理单个用户权限更有效。 向组角色授予权限时,所有当前和将来的组成员都会自动继承这些权限。

注释

角色名称不能超过 63 个字符,不允许某些名称。 了解详细信息: 管理角色

创建本地 Postgres 密码角色

可以使用 Lakebase UI 或标准 SQL 命令创建原生 Postgres 密码角色。

使用 UI:

  1. 在 Lakebase 应用中,导航到分支概述页,然后导航到分支 的角色和数据库 选项卡。
  2. 单击“ 添加角色 ”并指定角色名称(任何有效的 Postgres 角色名称)。

添加 Postgres 角色

  1. 单击 “创建”
  2. 复制生成的密码,并将其安全地提供给将使用此角色的用户。

Lakebase UI 使用 60 位 entropy 自动生成安全密码。 通过 UI 创建的角色会被自动授予作为 databricks_superuser 角色成员的身份,该角色提供广泛的数据库权限。

使用 SQL:

您还可以使用标准的 Postgres SQL 命令创建原生 Postgres 密码角色:

CREATE ROLE role_name WITH LOGIN PASSWORD 'your_secure_password';

使用 SQL 创建角色时,密码应至少有 12 个字符,并且混合使用小写、大写、数字和符号字符。 在创建时对用户定义的密码进行验证,以确保具备 60 位的熵值。

查看 Postgres 角色

UI

若要查看项目中的所有 Postgres 角色,请导航到 Lakebase 应用中分支的角色 和数据库 选项卡。 除了 系统角色之外,在分支中创建的所有角色都会列出,包括具有密码身份验证的原生 Postgres 角色。

查看Postgres角色

PostgreSQL

使用 \du 命令查看所有角色:

可以使用任何 Postgres 客户端(例如)或 Lakebase SQL 编辑器中的元命令查看所有 Postgres 角色,包括\dupsql

\du
                                      List of roles
          Role name          |                         Attributes
-----------------------------+------------------------------------------------------------
 cloud_admin                 | Superuser, Create role, Create DB, Replication, Bypass RLS
 my.user@databricks.com      | Create role, Create DB, Bypass RLS
 databricks_control_plane    | Superuser
 databricks_gateway          |
 databricks_monitor          |
 databricks_reader_12345     | Create role, Create DB, Replication, Bypass RLS
 databricks_replicator       | Replication
 databricks_superuser        | Create role, Create DB, Cannot login, Bypass RLS
 databricks_writer_12345     | Create role, Create DB, Replication, Bypass RLS

这将显示所有角色及其属性(超级用户、创建角色、创建数据库等)。

删除 Postgres 角色

可以删除基于 Databricks 标识的角色和本地 Postgres 密码角色。

UI

删除角色是一项无法撤销的永久操作。 不能删除拥有数据库的角色。 必须先删除数据库,然后再删除拥有该数据库的角色。

若要使用 UI 删除任何 Postgres 角色,请执行以下作:

  1. 在 Lakebase 应用中,进入您分支的角色和数据库选项卡。
  2. 角色菜单中选择“删除角色 ”并确认删除。

PostgreSQL

可以使用标准 Postgres 命令删除任何 Postgres 角色。 有关详细信息,请参阅 有关删除角色的 PostgreSQL 文档

删除角色:

DROP ROLE role_name;

删除基于 Azure Databricks 标识的角色后,在创建新角色之前,该标识将无法再使用 OAuth 令牌向 Postgres 进行身份验证。

预先创建的角色

创建项目后,Azure Databricks 会自动为项目管理和入门创建 Postgres 角色。

角色 Description 继承的权限
<project_owner_role> 项目创建者的 Azure Databricks 标识(例如 my.user@databricks.com)。 此角色拥有默认 databricks_postgres 数据库,可以登录和管理项目。 成员 databricks_superuser
databricks_superuser 内部管理角色。 用于配置和管理跨项目的访问权限。 此角色被授予广泛的特权。 继承自pg_read_all_datapg_write_all_datapg_monitor

详细了解这些角色的特定功能和特权: 预先创建的角色功能

Azure Databricks 创建的系统角色

Azure Databricks 创建内部服务所需的以下系统角色。 可以通过从\dupsql发出命令来查看这些角色。

角色 目的
cloud_admin 用于云基础结构管理的超级用户角色
databricks_control_plane 内部 Databricks 组件用于管理操作的超级用户角色
databricks_monitor 用于内部指标收集服务
databricks_replicator 用于数据库复制操作
databricks_writer_<dbid> 用于管理和创建同步表的数据库专用角色
databricks_reader_<dbid> 每个数据库角色用于读取注册在 Unity Catalog 中的表
databricks_gateway 用于托管数据服务服务的内部连接

若要了解角色、特权和角色成员身份在 Postgres 中的工作原理,请使用 Postgres 文档中的以下资源:

后续步骤