通过


教程:授予项目和数据库对新用户的访问权限

重要

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

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

了解如何设置有权访问 Lakebase 项目和数据库的新用户。 本教程介绍项目级权限(用于管理 Lakebase 资源)和数据库级权限(用于通过 Postgres 访问数据)。

关于两个权限系统

Lakebase Postgres 使用两层权限:

  1. 项目权限(ACL):控制平台级作,例如创建分支、管理计算和管理项目设置。 这些通过 Lakebase 应用进行管理。

  2. Postgres 角色权限:控制对数据库本身内数据的访问。 这些命令通过标准 Postgres GRANT 命令进行管理。

这些系统 没有自动同步。 可以根据组织的要求单独或共同授予这些权限:

  • 向需要平台访问和数据库访问的用户授予这两个层。
  • 仅向管理基础结构但不需要查询数据的用户授予项目权限。
  • 仅向需要查询数据但不需要管理 Lakebase 资源的用户授予数据库访问权限(可以使用连接详细信息等 psql 工具进行连接)。

本教程演示如何设置两个访问层:

  • 授予项目权限,以便用户可以使用 Lakebase 平台资源(本教程使用 CAN MANAGE 进行完全访问权限,还可以授予 CAN USE 用于仅查看和使用访问权限)
  • 使用适当的数据库权限创建 Postgres 角色,以便连接到和查询数据库

默认权限

默认情况下,所有工作区用户都继承 CAN CREATE 权限,该权限允许查看和创建项目。 若要授予对项目资源和数据库的其他访问权限,必须显式分配 CAN USE 或 CAN MANAGE。

先决条件

  • 包含数据库的 Lakebase 项目
  • 工作区管理员或 CAN MANAGE 对项目的权限
  • 创建项目所在的同一工作区内用户的 Azure Databricks 身份(电子邮件地址)

方案:添加具有读写访问权限的数据分析师

让我们逐步讲解如何添加一个名为 Alex Lopez 谁需要的数据分析师:

  • 能够创建和管理分支、计算和数据库(可管理)
  • 在您的 Postgres 数据库的 public 模式中,对表进行读取和写入访问权限。
  • 能够创建新表进行分析

步骤 1:授予项目权限

首先,向用户授予 CAN MANAGE 权限,以便他们可以执行项目管理作。

  1. 导航到 Lakebase App 中的项目。
  2. 单击左侧栏中 的“设置 ”。
  3. 滚动到 “项目权限 ”部分。
  4. 单击“ 授予权限”。
  5. 搜索并选择用户。
  6. 选择 “CAN MANAGE ”权限。
  7. 单击授权

授予 CAN MANAGE 权限

CAN MANAGE 允许的内容:

  • 创建和删除分支
  • 管理计算和配置项目设置
  • 创建和管理数据库和 Postgres 角色
  • 完全控制项目运作

注释

可管理授予对项目的完全权限,包括许多其他操作。 CAN USE 允许查看和使用资源(列表、查看、获取连接 URI 和某些分支作),而无需完全管理。 有关所有权限级别及每个级别允许的特定操作的完整列表,请参阅Lakebase 项目 ACL

步骤 2:为用户创建 Postgres 角色

现在创建一个 OAuth 角色,使 Alex 能够使用其 Azure Databricks 标识和 OAuth 令牌进行身份验证。 作为项目所有者,你具有创建角色所需的权限。

  1. 打开 Lakebase SQL 编辑器并连接到项目。

  2. databricks_auth创建扩展(如果尚未启用):

    CREATE EXTENSION IF NOT EXISTS databricks_auth;
    
  3. 使用该 databricks_create_role 函数为 Alex 创建 OAuth Postgres 角色:

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

这会创建一个 OAuth 角色,该角色:

  • 其名称与 Azure Databricks 标识相同(alex.lopez@databricks.com
  • 可以使用 OAuth 令牌进行身份验证
  • 具有 LOGIN 权限
  • 尚没有数据库权限(接下来我们将授予这些权限)

注释

关于 OAuth 角色:

  • OAuth 角色使用限时令牌进行身份验证(1 小时后过期)
  • 用户从 Lakebase 应用连接对话框获取令牌
  • 最适合交互式会话和工作区集成的工作流
  • 有关详细信息,请参阅 “关于身份验证”

步骤 3:授予 Postgres 数据库权限

现在授予 Alex 所需的数据库权限。 我们将向他们提供对架构的 public 读写访问权限。

-- Grant CONNECT permission on the database
GRANT CONNECT ON DATABASE databricks_postgres TO "alex.lopez@databricks.com";

-- Grant USAGE permission on the public schema (required to access objects in it)
GRANT USAGE ON SCHEMA public TO "alex.lopez@databricks.com";

-- Grant CREATE permission on the public schema (allows creating new tables)
GRANT CREATE ON SCHEMA public TO "alex.lopez@databricks.com";

-- Grant read-write access to all existing tables in public schema
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO "alex.lopez@databricks.com";

-- Grant permissions on future tables (so Alex can access new tables automatically)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "alex.lopez@databricks.com";

-- Grant permission to use sequences (needed for SERIAL columns)
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO "alex.lopez@databricks.com";

-- Grant permissions on future sequences
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT USAGE, SELECT ON SEQUENCES TO "alex.lopez@databricks.com";

这些权限允许的内容:

  • CONNECT:连接到数据库
  • USAGE 基于架构:访问架构中的对象
  • CREATE 基于架构:创建新表、视图、函数
  • SELECT, INSERT, UPDATE, DELETE 对表:读取和写入数据
  • 序列权限:使用自动递增列

步骤 4:测试连接

让 Alex 验证他们是否可以连接和访问数据库。

使用 Lakebase SQL 编辑器:

  1. Alex 打开 Lakebase App 并导航到项目。

  2. Alex 打开 Lakebase SQL 编辑器。

  3. 在 SQL 编辑器中,Alex 应能够运行以下查询来验证权限:

    -- Check role memberships
    SELECT rolname FROM pg_roles WHERE rolname = 'alex.lopez@databricks.com';
    
    -- Verify can read data
    SELECT * FROM your_table LIMIT 5;
    
    -- Verify can write data
    INSERT INTO your_table (column1, column2) VALUES ('test', 'value');
    
    -- Verify can create tables
    CREATE TABLE alex_analysis (
        id SERIAL PRIMARY KEY,
        notes TEXT,
        created_at TIMESTAMP DEFAULT NOW()
    );
    

或者,使用 psql:

Alex 还可以从外部工具进行连接,例如 psql

  1. 在项目仪表板中,单击“ 连接”。
  2. 选择分支、计算和数据库。
  3. 从“ 角色 ”下拉列表中选择 alex.lopez@databricks.com
  4. 复制psql连接代码片段。
  5. 单击 “复制 OAuth 令牌 ”获取身份验证令牌。
  6. 使用复制的 psql 命令进行连接,并在系统提示输入密码时输入 OAuth 令牌。
  7. 运行上面所示的相同验证查询。

替代方法:只读数据库访问

对于只需在不修改数据的情况下查询数据的用户,请授予相同的项目权限,但使用限制性更高的数据库权限:

项目权限

授予 CAN USE 权限,以实现仅供查看和使用的项目访问(例如,连接 URI、分支列表)。 授予 CAN MANAGE 权限,以允许创建数据库、角色和其他项目操作。

数据库权限

-- Create OAuth role
SELECT databricks_create_role('analyst@databricks.com', 'USER');

-- Grant CONNECT permission
GRANT CONNECT ON DATABASE databricks_postgres TO "analyst@databricks.com";

-- Grant USAGE on the public schema
GRANT USAGE ON SCHEMA public TO "analyst@databricks.com";

-- Grant SELECT-only access to all existing tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "analyst@databricks.com";

-- Grant SELECT-only access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public
    GRANT SELECT ON TABLES TO "analyst@databricks.com";

-- Grant USAGE on sequences (needed to view sequence values)
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "analyst@databricks.com";

此授予:

  • 对所有表的读取访问权限
  • 查看数据库结构
  • 无法修改数据(否 INSERT、 UPDATE、DELETE)
  • 无法创建表或其他对象

使用组和服务主体

可以按照相同的过程授予对 Azure Databricks 组和服务主体的访问权限。 通过 Lakebase App UI 授予项目权限,使用 databricks_create_role() 创建 OAuth 角色,并授予数据库权限。 有关详细信息,请参阅和服务主体

使用原生 Postgres 密码角色

作为 OAuth 角色的替代方法,可以为无法每小时刷新令牌、长时间运行的进程或不支持 OAuth 的外部工具的应用程序创建本机 Postgres 密码角色。 有关创建和管理密码角色的说明,请参阅 “管理 Postgres 角色”。

后续步骤