PostgreSQL RLS未按预期应用

PostgreSQL RLS未按预期应用,postgresql,row-level-security,Postgresql,Row Level Security,我有一个函数,一个函数current_user_selected_upr,返回一个文本。我想使用此函数应用rls策略: 创建或替换函数当前用户选择的upr返回文本稳定语言sql作为$$ 选择“IDF”作为upr; $$; 如果不存在doe,则创建表 序列号不为空, upr文本不为空默认值“NE” ; 创建用户超级管理员登录; 将doe上的select授予超级管理员; 创建策略doe_管理_策略 关于public.doe 用于选择超级管理员 使用upr=private.current\u user

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

创建或替换函数当前用户选择的upr返回文本稳定语言sql作为$$ 选择“IDF”作为upr; $$; 如果不存在doe,则创建表 序列号不为空, upr文本不为空默认值“NE” ; 创建用户超级管理员登录; 将doe上的select授予超级管理员; 创建策略doe_管理_策略 关于public.doe 用于选择超级管理员 使用upr=private.current\u user\u selected\u upr; 但是,该政策从未适用于:

创建或替换函数测试返回文本语言plpgsql安全调用程序作为$$ 声明 普遍定期审议能源部案文; upr_配置文本; 开始 设置本地角色超级管理员; 选择当前用户选择的upr进入upr配置; 从doe d中选择d.upr进入upr\U doe; 返回concat'Config:',upr_Config',rls results:',upr_doe; 终止 $$; 选择测试; -返回配置:IDF | rls结果:NE 我已把这个问题重新整理了一遍。函数current_user_selected_upr返回IDF,但所选行为NE。为什么?


我只是忘了加上:

alter table doe启用行级安全性;
您的代码没有为创建的表启用RLS。您还需要使用FORCE选项,因为默认情况下,表的所有者会绕过RLS。@一个名为“无”但我使用了“设置本地角色”,所以所选角色应该与表所有者不同,对吗?请不要只链接到代码,将代码添加到问题中。@LaurenzAlbe完成了