2016-10-05 15 views
1
set role qstoolbox; 
update contract set contract_reference = 'ok ok ok' where id = 2 

上述工作 查詢成功返回:一行受影響,41毫秒執行時間。PostgreSQL無法更新行(具有行級安全性)

set role user_role; 
update contract set contract_reference = ':(:(:(' where id = 2 

這一個不 查詢成功返回:0行受到影響,31毫秒的執行時間。

enter image description here

權限似乎好,至少它不清楚我在做什麼錯在這裏。

行級別的安全性已被添加到該表

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

好吧,我失去了一些東西在這條線

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);

注意我用的是缺少(真)

謝謝到@kli n讓我更詳細地學習文檔

1

定義上表中的行安全策略或禁用行安全。每the documentation

當行安全性上的表啓用(用ALTER TABLE ...啓用行級安全性),一切正常訪問表中選擇行或修改行必須由行安全策略允許。 (但是,表的所有者通常不受行安全策略的限制。)如果表中沒有策略存在,則使用默認拒絕策略,這意味着沒有行可見或可以修改。

+0

我想我已經這樣做了,已經更新了問題,我也認爲這是在pgadmin屏幕截圖中顯示的內容? – Tim

+1

是的,你正在使用()'。圖片沒有顯示安全策略。 – klin