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

PostgreSQL行级安全插入策略失效:非白名单账号可插入数据

PostgreSQL行级安全策略失效问题排查与修复

1. 首要错误:SQL关键字拼写错误

你的插入策略中,将判断存在性的关键字EXISTS误写为EXIST,这会导致PostgreSQL无法识别该校验逻辑,使得白名单验证完全失效,因此非白名单数据也能成功插入。

2. 必要前提:确认表已启用行级安全

如果未给promo表开启行级安全,即使策略编写正确也不会生效,需要先执行以下语句:

ALTER TABLE public.promo ENABLE ROW LEVEL SECURITY;

3. 修正后的完整策略

将EXIST改为EXISTS,同时子查询只需返回任意值(比如1)即可完成存在性判断,无需返回具体字段:

CREATE POLICY "Role Api can create a promo of the user if exists on the whitelist."
       ON public.promo
       FOR INSERT TO role_api
       WITH CHECK (
        EXISTS (SELECT 1 FROM public.promo_whitelist AS pw WHERE 
           pw.seller_id = promo.seller_id AND pw.promo_type = promo.promo_type
        )
       );

4. 权限优化建议

无需授予role_api全表权限,遵循最小权限原则,仅授予插入权限即可:

GRANT INSERT ON TABLE public.promo TO role_api;

验证:切换到role_api身份插入非白名单数据,此时应该触发行级安全限制,返回报错信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:09:52