我有一个运行大约 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;
在我看来这应该是完美的。我希望他只会看到:
我有什么:
我尝试进行授予选择: 创建用户 read_only_user,密码为“password”; 将公共模式中所有表的 select 权限授予 read_only_user; 在这种情况下,用户将无权从将来创建的表中进行选择。
我缺少什么以及我应该做什么来创建具有从 scema public 中的所有表中进行选择的权限并且不会看到其他数据库的用户?
默认权限可以帮助您,详细信息sql-alterdefaultprivileges。
喜欢(对于每个数据库):
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;