跳到主要内容

部署教程

CloudBeaver 只读权限配置:PostgreSQL 账号与团队连接

发布于

为 CloudBeaver 设置 PostgreSQL 只读角色,分配团队连接并检查可读、不可写的权限范围。

给团队一个只读数据库入口

CloudBeaver 网页账号决定谁能进入管理器、看到哪些连接,数据库账号决定 SQL 能执行什么。本篇使用已部署的 CloudBeaver 和 PostgreSQL,将指定库的查询权限分给团队成员。

前往雨云选购 ↗

注册推荐码:KuZhuJi

创建 PostgreSQL 查询角色

数据库示例为 appdb,Schema 为 public,只读角色为 cb_reader;以下操作由有建角色和授权权限的管理员执行。

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
CREATE ROLE cb_reader LOGIN;
GRANT CONNECT ON DATABASE appdb TO cb_reader;

在 psql 交互设置密码并切换到目标数据库:

text;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
\password cb_reader
\connect appdb

进入 appdb 后授予 public 中现有表、视图的读取权限:

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
GRANT USAGE ON SCHEMA public TO cb_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO cb_reader;

只需读少数表时,改为授权具体表或脱敏视图。角色不要继承额外写入角色,也不要使用对象所有者或超级用户。

让后续新表也能读取

如果应用迁移由 app_owner 建表,在 appdb 中设置该创建者的默认权限:

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
ALTER DEFAULT PRIVILEGES FOR ROLE app_owner IN SCHEMA public
GRANT SELECT ON TABLES TO cb_reader;

这只影响 app_owner 以后创建的对象。已有表仍用 GRANT 处理,其他建表角色需分别设置。还要检查公开授权和可调用函数是否扩大了操作范围。

确认实际连接身份与权限

在 CloudBeaver 新建 PostgreSQL 连接,填入从服务器可达的数据库地址,使用 cb_reader 登录:

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
SELECT current_database(), current_user, session_user;
SELECT rolname, rolsuper, rolcreaterole, rolcreatedb
FROM pg_roles
WHERE rolname = current_user;

演示库有 public.orders 表时,检查读取、更新权限并执行限定行数的查询:

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
SELECT has_table_privilege(current_user, 'public.orders', 'SELECT') AS can_read,
       has_table_privilege(current_user, 'public.orders', 'UPDATE') AS can_update;
SELECT id, status FROM public.orders ORDER BY id LIMIT 20;

预期 can_read 为 true,can_update 为 false。拒绝写入验证放在演示库,使用无业务影响的样例表:

sql;使用前请核对本文前提。 如内容超出,可左右滑动,键盘使用方向键或 Home/End 查看。
仅复制文本,不会执行。
BEGIN;
UPDATE public.orders SET status = status WHERE false;
ROLLBACK;

UPDATE 应被拒绝,随后结束该事务。若未拒绝,检查角色成员关系、对象所有权和授权;不要用生产表验证零行写入,表级触发器仍可能产生影响。

分配团队连接并回收权限

管理员为普通成员创建独立网页用户,按用途组成团队,仅分配需要的连接。用普通账号登录,检查连接列表和 current_user。

共享数据库账号便于使用,但数据库日志看到的是同一账号;需要区分个人身份时,使用各自的数据库凭据。成员离开时同时回收网页访问和数据库权限,已经共享的密码按需要轮换。