set role qstoolbox;
update contract set contract_reference = 'ok ok ok' where id = 2
以上作品 查询成功返回:一行受影响,执行时间为41毫秒。
set role user_role;
update contract set contract_reference = ':( :( :(' where id = 2
这个没有 查询成功返回:0行受影响,31毫秒执行时间。
权限似乎没问题,至少我不清楚我在这里做错了什么。
使用
将行级安全性添加到此表中 alter table contract enable row level security;
与这些政策一起
create policy view_contract on contract for select using(true);
create policy add_contract on contract for insert to user_role with check(true);
create policy delete_contract on contract for delete to user_role using(true);
create policy change_contract on contract for update to user_role with check(true);
答案 0 :(得分:1)
定义行安全策略或禁用表上的行安全性。每the documentation:
在表上启用行安全性(使用ALTER TABLE ... ENABLE ROW LEVEL SECURITY)时,行安全策略必须允许对表进行选择行或修改行的所有正常访问。 (但是,表的所有者通常不受行安全策略的约束。)如果表没有策略,则使用default-deny策略,这意味着没有行可见或可以修改。
答案 1 :(得分:0)
好的,我在这行中遗漏了一些东西
create policy change_contract on contract for update to user_role with check(true);
需要
create policy change_contract on contract for update to user_role using(true) with check(true);
注意我缺少使用(true)
感谢@klin让我更详细地研究文档