如何在 AWS RDS 的 Postgres 中创建只读用户?

use*_*094 7 postgresql amazon-web-services amazon-rds

我在 RDS 中启动了一个 Postgres 实例,并通过以下命令创建了一个用户,但是,他们不断创建新表,我不知道如何限制他们创建。

CREATE USER my_ro_user WITH PASSWORD 'XXXXX';
GRANT CONNECT ON DATABASE "postgres" TO my_ro_user;
GRANT USAGE ON SCHEMA public TO my_ro_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO my_ro_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO my_ro_user;
REVOKE CREATE ON SCHEMA public FROM my_ro_user;
Run Code Online (Sandbox Code Playgroud)

我认为REVOKE最后一行中的 会阻止他们创建新表,但情况似乎并非如此。我究竟做错了什么?

Jer*_*emy 7

默认情况下,公共角色也具有公共模式的创建权限。由于 my_ro_user 是 public 成员,因此您还需要撤销它:

REVOKE CREATE ON SCHEMA public FROM public;
Run Code Online (Sandbox Code Playgroud)

通常,在每个生产数据库上执行此操作是一个好主意。

编辑:从 Postgres 15 开始,默认情况下 public 将不再能够在公共模式中创建对象。

  • 不,不完全是这样。有一个公共模式,但它与公共角色不同。绝对准确地说,public 是一个关键字,指的是授予每个用户的权限。默认情况下会创建公共模式,并且默认情况下,将创建权限授予此模式的 PUBLIC。他们碰巧有相同的名字,但没有明确的关联。 (2认同)