首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL RLS未按预期应用

PostgreSQL RLS未按预期应用
EN

Stack Overflow用户
提问于 2021-04-12 16:37:11
回答 1查看 23关注 0票数 0

我有一个函数,一个返回text的函数current_user_selected_upr。我想使用此函数来应用rls策略:

代码语言:javascript
复制
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());

但是,该策略从未应用过:

代码语言:javascript
复制
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。为什么?

https://www.db-fiddle.com/f/r1Mrh9QenB6YEuNCAkcqkQ/2

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 17:38:47

我只是忘了补充:

代码语言:javascript
复制
alter table doe enable row level security;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67055172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档