我可以直接查询表时,对视图表的权限被拒绝

时间:2019-03-15 12:27:55

标签: postgresql permissions

我有一个奇怪的问题。我有一个类似public.foo的表,其中已启用RLS。现在,我有了另一个像create view app.foo_v as select * from public.foo的视图。当我现在进行select * from public.foo时,一切正常,并按预期工作。但是当我做select * from app.foo_v时,会出现如下错误:

  

SQL错误[42501]:错误:关系foo的权限被拒绝

我在这里缺少什么特权?

编辑1: 即使我暂时禁用RLS,该行为仍然存在

编辑2:

-- as postgres
create schema report;
create user app_user with password 'a';
create user view_user with password 'a';
create user app_admin with password 'a';

grant all on schema report to view_user;
grant app_user to app_admin;
grant view_user to app_admin;

-- as app_user
create table fooo(name varchar);

-- as view_user
create view report.foo_v as select * from public.fooo;

-- as app_admin
select * from public.fooo;
select * from report.foo_v;

我正在运行PS:x86_64-pc-linux-gnu上的PostgreSQL 10.6,由gcc(GCC)4.8.3 20140911(Red Hat 4.8.3-9)编译,64位

1 个答案:

答案 0 :(得分:1)

您的view_user似乎缺少对基础表的SELECT特权。

GRANT SELECT ON TABLE fooo IN SCHEMA public to view_user;

正如您在评论中所述,如果用户A担任角色C,也可以解决该问题。