根据用户的不同,简单的select查询在postgres数据库中不返回结果。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据用户的不同,简单的select查询在postgres数据库中不返回结果。相关的知识,希望对你有一定的参考价值。
我正试图为我的数据库创建一个全读用户,但似乎最简单的查询都不能正常工作。
当我尝试运行查询 select * from public.reports limit 5;
在使用 postgres
用户(db所有者),返回5行结果。然而,当使用这个新用户时,它没有返回任何结果。它没有抛出任何错误,也没有说什么。它只是没有返回任何结果,就像表是空的一样。
我使用以下查询创建了新用户。
CREATE USER "new_user" WITH PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE my_database TO "new_user";
GRANT USAGE ON SCHEMA public TO "new_user";
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "new_user";
GRANT SELECT ON ALL TABLES IN SCHEMA public to "new_user";
ALTER USER "new_user" WITH LOGIN;
我漏了什么?
答案
所以你启用了行级安全?手册上写着。
如果一个表启用了行级安全,但没有适用的策略,那么就会假设一个 "默认拒绝 "的策略,这样就不会有可见的或可更新的行。
这将解释你的用户无法看到任何行。
绕过RLS的最简单方法 一般 对于新用户来说,是与 BYPASSRLS
.
CREATE USER new_user WITH BYPASSRLS PASSWORD 'strong_password';
否则,你需要 CREATE POLICY
来允许事情。要允许对表的所有读写操作 reports
为我们的新角色。
CREATE POLICY foo ON public.reports TO new_user USING (true) WITH CHECK (true);
以上是关于根据用户的不同,简单的select查询在postgres数据库中不返回结果。的主要内容,如果未能解决你的问题,请参考以下文章
SQL:根据 B 列中的布尔值更改 SELECT 查询以在 A 列上显示不同的值