我有一个函数,一个返回text的函数current_user_selected_upr。我想使用此函数来应用rls策略:
create or replace function current_user_selected_upr() returns text stable language sql as $$
select 'IDF' as upr;
$$;
create table if not exists doe(
id serial not null,
upr text not null default 'NE'
);
create user super_admin nologin;
grant select on doe to super_admin;
create policy doe_admin_policy
on public.doe
for select to "super_admin"
using (upr = private.current_user_selected_upr());但是,该策略从未应用过:
create or replace function test_rls() returns text language plpgsql security invoker as $$
declare
upr_doe text;
upr_config text;
begin
set local role super_admin;
select current_user_selected_upr() into upr_config;
select d.upr into upr_doe from doe d;
return concat('Config : ', upr_config, ' | rls results : ', upr_doe);
end;
$$;
select test_rls();
-- Returns Config : IDF | rls results : NE我轻而易举地重现了这个问题。函数current_user_selected_upr返回IDF,但选定的行为NE。为什么?
发布于 2021-04-12 17:38:47
我只是忘了补充:
alter table doe enable row level security;https://stackoverflow.com/questions/67055172
复制相似问题