重要
Lakebase 自动缩放在以下区域处于 Beta 版本:eastus2,westeurope,westus。
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 令牌 。
先决条件:
- 你必须对数据库拥有
CREATE和CREATE ROLE权限 - 您必须使用有效的 OAuth 令牌对 Azure Databricks 身份进行认证。
- 本机 Postgres 经过身份验证的用户会话无法创建 OAuth 角色
创建 OAuth 角色:
创建
databricks_auth扩展。 每个 Postgres 数据库必须有自己的扩展。CREATE EXTENSION IF NOT EXISTS databricks_auth;使用
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 中的组级别管理权限,而不是维护单个用户的权限。
向新创建的角色授予数据库权限。
该 databricks_create_role() 函数仅创建具有权限的 LOGIN Postgres 角色。 创建角色后,必须授予用户访问的特定数据库、架构或表的相应数据库特权和权限。 了解如何: 管理权限
基于组的身份验证
为 Azure Databricks 组创建 Postgres 角色时,启用基于组的身份验证。 这样,Azure Databricks 组的任何成员就可以使用组的角色向 Postgres 进行身份验证,从而简化权限管理。
工作原理:
- 使用
databricks_create_role('Group Name', 'GROUP').. 为 Databricks 组创建 Postgres 角色。 - 向 Postgres 中的组角色授予数据库权限。 请参阅 “管理权限”。
- Databricks 组的任何直接或间接成员(用户或服务主体)都可以使用其单独的 OAuth 令牌连接到 Postgres。
- 连接时,成员将作为组角色进行身份验证,并继承授予该角色的所有权限。
身份验证流:
组成员连接时,将组的 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:
- 在 Lakebase 应用中,导航到分支概述页,然后导航到分支 的角色和数据库 选项卡。
- 单击“ 添加角色 ”并指定角色名称(任何有效的 Postgres 角色名称)。
- 单击 “创建” 。
- 复制生成的密码,并将其安全地提供给将使用此角色的用户。
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 角色。
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 角色,请执行以下作:
- 在 Lakebase 应用中,进入您分支的角色和数据库选项卡。
- 从 角色菜单中选择“删除角色 ”并确认删除。
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_data、pg_write_all_data和pg_monitor。 |
详细了解这些角色的特定功能和特权: 预先创建的角色功能
Azure Databricks 创建的系统角色
Azure Databricks 创建内部服务所需的以下系统角色。 可以通过从\du或psql发出命令来查看这些角色。
| 角色 | 目的 |
|---|---|
cloud_admin |
用于云基础结构管理的超级用户角色 |
databricks_control_plane |
内部 Databricks 组件用于管理操作的超级用户角色 |
databricks_monitor |
用于内部指标收集服务 |
databricks_replicator |
用于数据库复制操作 |
databricks_writer_<dbid> |
用于管理和创建同步表的数据库专用角色 |
databricks_reader_<dbid> |
每个数据库角色用于读取注册在 Unity Catalog 中的表 |
databricks_gateway |
用于托管数据服务服务的内部连接 |
若要了解角色、特权和角色成员身份在 Postgres 中的工作原理,请使用 Postgres 文档中的以下资源: