根据用户的不同,简单的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 列上显示不同的值

如何根据 PHP 中的会话数据将用户重定向到不同的页面?

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

sql查询原理

视图的概述

怎么在oracle中查询出所有的视图view?