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

如何允许Postgres用户绕过所有表的RLS(行级安全性)?

Postgres用户绕过所有表RLS限制的可行方法

以下是几种直接可行的方法,适用于不同场景:

  • 赋予BYPASSRLS权限
    这是全局绕过RLS的最直接方式,给目标用户或角色添加该权限后,用户对所有开启RLS的表都不受限制:

    GRANT BYPASSRLS TO target_user;
    

    注意:只有超级用户才能执行这个授权操作,且该权限风险极高,需谨慎分配。

  • 成为表的所有者
    Postgres默认规则中,任何表的所有者不受该表的RLS约束,不管表是否开启了RLS。如果用户是数据库中所有表的所有者,自然能绕过所有RLS限制。

  • 临时禁用全局RLS(超级用户专属)
    超级用户可以临时修改参数row_security为off,全局禁用RLS,操作完成后再恢复:

    -- 临时禁用
    SET row_security = off;
    -- 执行需要绕过RLS的操作
    -- 恢复设置
    SET row_security = on;
    

    这个设置只对当前会话生效,不会影响其他用户。

  • 通过SECURITY DEFINER函数间接绕过
    创建一个由拥有BYPASSRLS权限或表所有者用户编写的SECURITY DEFINER函数,普通用户调用该函数时,会以函数创建者的身份执行,从而绕过RLS。示例:

    -- 以拥有BYPASSRLS的用户登录后创建函数
    CREATE OR REPLACE FUNCTION get_all_data()
    RETURNS SETOF your_table
    SECURITY DEFINER
    AS $$
    SELECT * FROM your_table;
    $$ LANGUAGE sql;
    
    -- 给普通用户授予函数调用权限
    GRANT EXECUTE ON FUNCTION get_all_data() TO regular_user;
    

    注意:这种方式存在权限提升风险,必须严格控制函数的逻辑和调用权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:15:42