首页 > 解决方案 > 允许架构中所有表的“SELECT”权限,包括由不同用户创建的新表(AWS RDS;PostgreSQL 11)

问题描述

我有一个readonly用户,我定义如下:

CREATE ROLE readonly;
GRANT CONNECT ON DATABASE dbname TO readonly;

GRANT USAGE ON SCHEMA public TO readonly;
GRANT USAGE ON SCHEMA schema_name TO readonly;

GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO readonly;

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO readonly;

我目前正在以postgres用户身份运行这些命令rds_superuser(我正在使用 AWS RDS)。这工作正常,并允许readonly角色读取postgres用户创建的现有表,以及创建的任何新表postgres。但是,当新角色创建表时,readonly不能创建新角色创建的表SELECT。例如,我也有一个readwrite角色,并且在该架构中创建的表 byreadwrite不能是SELECTby readonly

如何在 PostgreSQL 中创建只读用户?建议默认情况下ALTER DEFAULT PRIVILEGES ... 仅适用于发出命令的用户创建的对象。

我怎样才能更一般地只允许readonly用户对SELECT架构中创建的任何表具有特权,而不管是谁创建它。

标签: postgresql

解决方案


您将需要更改任何潜在创建者的默认权限,例如对于您的readwrite角色,使用以下

ALTER DEFAULT PRIVILEGES for role readwrite
    IN SCHEMA public GRANT SELECT ON TABLES TO readonly;

推荐阅读