You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:为客户创建个性化角色并实现数据权限控制

PostgreSQL客户专属角色创建与数据权限控制方案

1. 先搞定基础角色(避免递归错误)

先建一个通用的customer角色当权限模板,这个角色不用登录,只给它两张表的查询权限就行,别搞继承循环:

-- 创建基础权限角色,禁止登录
CREATE ROLE customer NOLOGIN;
-- 赋予table_1和table_2的查询权限
GRANT SELECT ON table_1, table_2 TO customer;

之前的无限递归错误,大概率是你不小心让新角色继承了自己,或者customer角色继承了包含它的角色,用\du命令能查看角色继承关系,排查下就行。

2. 创建ALICE的专属角色

直接建client_alice_stewart角色,让它继承customer的权限,需要登录的话加上LOGIN和密码:

-- 创建专属角色,设置登录密码(不需要登录就去掉LOGIN)
CREATE ROLE client_alice_stewart LOGIN PASSWORD '自定义密码';
-- 让专属角色继承基础权限
GRANT customer TO client_alice_stewart;

3. 关键:用行级安全锁死数据访问

光给查询权限还不够,得限制只能看到自己的id(51)对应的数据,这就得开行级安全(RLS):

-- 给两张表开启行级安全
ALTER TABLE table_1 ENABLE ROW LEVEL SECURITY;
ALTER TABLE table_2 ENABLE ROW LEVEL SECURITY;

-- 给ALICE的角色建table_1的访问策略,只允许看id=51的记录
CREATE POLICY alice_access_table1 ON table_1
FOR SELECT TO client_alice_stewart
USING (id = 51);

-- 同理给table_2建策略
CREATE POLICY alice_access_table2 ON table_2
FOR SELECT TO client_alice_stewart
USING (id = 51);

4. 验证效果

切换到ALICE的角色测试下:

SET ROLE client_alice_stewart;
SELECT * FROM table_1; -- 只会返回id=51的记录
SELECT * FROM table_2; -- 一样的效果
RESET ROLE;

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:25:46