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

PostgreSQL中通过角色组授予BYPASSRLS权限失效问题求助

PostgreSQL角色继承BYPASSRLS权限失效的解决方案

问题根源

PostgreSQL中BYPASSRLS是仅能直接赋予用户的安全敏感属性,无法通过角色继承获得。哪怕创建了带BYPASSRLS的角色并授予用户,用户也不会继承这个权限——这是系统为安全设计的硬性限制。

正确实现方式

方案1:角色管理常规权限,单独给用户加BYPASSRLS

保留角色用于统一管理查询、Schema权限,直接给目标用户添加BYPASSRLS属性:

-- 创建无登录角色,管理常规权限
create role group nologin;
grant usage on schema public to group;
grant select on all tables in schema public to group;

-- 创建用户时直接赋予BYPASSRLS,再授予角色
create user archibald password 'password' bypassrls;
grant group to archibald;

方案2:批量给角色下的用户添加BYPASSRLS

如果有多个用户需要加入该角色并获得BYPASSRLS,可以用动态SQL批量处理:

-- 批量给所有属于group角色的用户添加BYPASSRLS
do $$
declare
    rec record;
begin
    for rec in select usename from pg_user u 
               join pg_auth_members m on u.usesysid = m.member 
               join pg_roles r on m.roleid = r.oid 
               where r.rolname = 'group' loop
        execute format('alter user %I bypassrls', rec.usename);
    end loop;
end $$;

补充说明

后续新增用户加入group角色时,需要同时执行alter user <用户名> bypassrls,或者用上述脚本定期执行,也可以编写事件触发器,在用户被授予group角色时自动添加BYPASSRLS属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:22:05