我有一个奇怪的问题。我有一个类似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位
答案 0 :(得分:1)
您的view_user似乎缺少对基础表的SELECT特权。
GRANT SELECT ON TABLE fooo IN SCHEMA public to view_user;
正如您在评论中所述,如果用户A担任角色C,也可以解决该问题。