简单 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);
我正在尝试为我的数据库创建一个读取所有用户,但似乎最简单的查询无法正常工作。
当我尝试 运行 查询 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);