simple select查询在postgres数据库中不返回结果,具体取决于用户

wecizke3  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(345)

我正在尝试为我的数据库创建一个read-all用户,但是最简单的查询似乎不能正常工作。
当我尝试运行查询时 select * from public.reports limit 5; 当使用 postgres 用户(db owner),返回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;

我错过了什么?

wpx232ag

wpx232ag1#

所以您启用了行级安全性?手册:
如果为表启用了行级安全性,但不存在适用的策略,则假定使用“default deny”策略,这样就不会有任何行可见或可更新。
这说明用户看不到任何行。
对于新用户来说,绕过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);

相关问题