如何在 PostgreSQL 中创建具有 SELECT、INSERT、UPDATE...[DML] 访问权限的用户

How to create a User in PostgreSQL with SELECT, INSERT, UPDATE,... [DML] access

我正在尝试在 PostgreSQL 中创建两个用户

  1. 谁(user1)可以访问 db1 中的 tables 并且应该能够 运行 (DML) SELECT、INSERT、UPDATE...

  2. 谁(用户 2)只能在特定数据库(例如:db1)中创建 table

我尝试的命令如下所示,但是当我使用 user2 创建新的 table 时,user1 无法 select/insert on tables。

用户 1:

grant CONNECT ON DATABASE db1 to user1;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public grant SELECT, INSERT, UPDATE, DELETE ON TABLES to user1;

用户 2:

GRANT CREATE ON SCHEMA public TO user2;
grant CONNECT ON DATABASE db1 to user2;
revoke SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public from user2;

谁能帮我解决我在这里遗漏的问题

谢谢

您需要更改 user1 创建的对象的默认权限。这是通过作为 alter default privileges 语句的一部分的选项 for role 完成的。

alter default privileges 
   for role user2 ---<< this
   IN SCHEMA public 
   grant SELECT, INSERT, UPDATE, DELETE ON TABLES to user1;

如果您不指定该选项,默认值将应用于用户 运行 (ALTER) 语句创建的对象。