简单 select 查询 returns 在 postgres 数据库中没有结果取决于用户

Simple select query returns no result in postgres database depending on user

我正在尝试为我的数据库创建一个读取所有用户,但似乎最简单的查询无法正常工作。

当我尝试 运行 查询 select * from public.reports limit 5; 时,它在使用 postgres 用户(数据库所有者)时工作正常,返回 5 行结果。但是,returns 使用这个新用户时没有结果。它没有抛出任何错误,它什么也没说。就是returns没有结果,好像table是空的。

我使用以下查询创建了新用户:

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;

我错过了什么?

所以您启用了行级安全性? The manual:

If row-level security is enabled for a table, but no applicable policies exist, a “default deny” policy is assumed, so that no rows will be visible or updatable.

这可以解释您的用户看不到任何行。

新用户绕过 RLS 通常 的最简单方法是 BYPASSRLS

CREATE USER new_user WITH BYPASSRLS PASSWORD 'strong_password';

否则,您需要 CREATE POLICY 才能允许。为我们的新角色允许 table reports 上的所有读写操作:

CREATE POLICY foo ON public.reports TO new_user USING (true) WITH CHECK (true);