2

在 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;

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

我怎样才能做到这一点?

4

1 回答 1

1

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

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

如果您坚持必须拥有它,请尝试创建一个事件触发器,该触发器在某个用户尝试创建表时抛出异常。

于 2018-12-28T09:08:51.217 回答