Postgresql 中仅读取用户出现问题

问题描述 投票:0回答:1

我有一个运行大约 20 个 postgres 数据库的集群。我需要为每个数据库创建只读用户。 在这台服务器上我有服务用户,例如service_user 自动执行数据库中的所有操作,如迁移、更新、插入等。我有超级用户 super_user 拥有所有权限。 因此,我需要在每个数据库上创建用户,该用户将有权仅在他所属的数据库中的公共模式中进行选择,并且不应看到其他数据库,并且无权创建新对象。 就我而言,所有实体都属于 service_user。

我现在做什么 - 我正在使用拥有所有权限的 super_user 连接到数据库。比我执行这个命令

创建用户read_only_user,密码为“password”;
将公共架构中所有表的 select 权限授予 read_only_user;
更改模式中的默认权限 public grant select on table to read_only_user;

在我看来这应该是完美的。我希望他只会看到:

  1. 公共模式。
  2. 所有桌子都是公开的
  3. 用户可以查看当前表中的所有信息
  4. 用户可以在将来创建的表中查看信息
  5. 用户看不到其他数据库

我有什么:

  1. 用户对 service_user 将来创建的表没有权限。只有super_user创建的表他才会有权限。
  2. 用户可以创建表,但不应该创建表。
  3. 他可以看到其他数据库名称。我希望他没有这个机会。

我尝试进行授予选择: 创建用户 read_only_user,密码为“password”; 将公共模式中所有表的 select 权限授予 read_only_user; 在这种情况下,用户将无权从将来创建的表中进行选择。

我缺少什么以及我应该做什么来创建具有从 scema public 中的所有表中进行选择的权限并且不会看到其他数据库的用户?

postgresql database-administration postgres-14
1个回答
0
投票

默认权限可以帮助您,详细信息sql-alterdefaultprivileges

喜欢(对于每个数据库):

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;
© www.soinside.com 2019 - 2024. All rights reserved.