pgsql角色用户授权

和第三方对接:
我需要将某数据库下某个schema下指定的几个表拿給第三方系统看,
这个第三方系统只能查看该指定的几个表,不能进行进行增删改操作,

解决方法


1、创建只读用户:
CREATE USER ronly WITH ENCRYPTED PASSWORD 'r123456';

2、设置默认事务只读:
alter user ronly set default_transaction_read_only=on;

3、赋予用户连接数据库mypgsql的权限:
GRANT CONNECT ON DATABASE mypgsql to ronly;

4、现有的所有在模式(schema)下的表的使用权限赋给用户ronly
GRANT USAGE ON SCHEMA myschema1  to ronly;

5、赋予用户ronly所有public下的表的selectGRANT SELECT ON myschema1.table1,myschema1.table2 TO ronly;

至此,权限设置完成!

可以达到只读table1,table2的功能
但是我用该只读用户登录数据库之后,发现别的schema 也显示出来了,如myschema2显示出来了,以及上面的myschema1中的table3也显示出来了

请问我们的数据库角色授权可以指定用户登录只显示某个schema下的指定table1、table2,但是不显示table3这样的效果么?

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


可以在数据库角色授权中指定用户只显示特定模式下的特定表。

可以通过在该只读用户上移除对其他模式和表的访问权限来达到这个目的。

例如:

REVOKE USAGE, SELECT ON SCHEMA myschema2 FROM ronly;
REVOKE SELECT ON myschema1.table3 FROM ronly;

这样,用户ronly将不再有权限查看myschema2模式和myschema1.table3表。