行级策略在我的表上不起作用

时间:2018-05-09 10:24:42

标签: sql postgresql row-level-security

我有一个表,我正在尝试应用策略,设置看起来像这样:

create role anonymous nologin;
create schema api;
create schema private;
create table private.mytable(
    id  serial primary key,
    description text default ''
);
create view api.mytable as select * from private.mytable;
insert into api.mytable (description) values ('row 1'), ('row 2');
grant usage on schema api to anonymous;
grant select on api.mytable to anonymous;
alter table private.mytable enable row level security;
create policy mytable_policy on private.mytable
    for select
    using (null);

当我将角色设置为anonymous并从mytable中选择所有记录时:

set role anonymous;
select * from api.mytable;

我认为没有要返回的行,因为我在策略中using子句中的表达式是null,但我得到了所有内容。
我尝试了不同的postgresql版本(9.5,9.6,10.3),但它们都有相同的行为,我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

https://stackoverflow.com/a/33863371/5315974

RLS不会使用这样的观点。您可以将RLS用于视图,尽管它是有限的。

你可以做的是

alter view api.mytable owner to anonymous ;