限制 RDS PostgreSQL 9.6 中新创建用户的创建 table 权限

Restrict create table privilege to newly created users in RDS PostgreSQL 9.6

我在 RDS PostgreSQL 9.6 中创建只读用户时遇到问题。我正在执行以下 SQL 命令:

---- ###### CREATE ROLE ################
CREATE ROLE readonlyrole_dev;

-- Grant access to existing tables
GRANT USAGE ON SCHEMA public TO readonlyrole_dev;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyrole_dev;

-- set the privileges that will be applied to objects created in the future.
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonlyrole_dev;



CREATE USER readonly_dev WITH PASSWORD 'welcome1';
GRANT readonlyrole_dev TO readonly_dev;

当我使用 readonly_dev 用户登录时,默认情况下它有权创建新表,但我不想这样做。我想将 readonly_dev 保留为只读用户。

注意:要撤销我正在执行的用户的访问权限

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

这也撤销了所有旧用户的创建对象权限。我只想撤销新创建用户的创建权限。

我该怎么做?

你不能那样做,也没有必要。

只是拒绝用户对所有模式的 CREATE 权限。您应该为此使用用户组 - 将所有应该有权创建 table 的用户放在一个对架构具有所需权限的组中,并从 PUBLIC 中撤消 CREATE

如果您坚持必须拥有这个,请尝试创建一个 事件触发器,当某个用户试图创建一个 table.