如何在 A 创建的表上默认将 SELECT 授予 B?

ebo*_*osi 3 postgresql permissions

背景
在我的 PostgreSQL 实例中(比如只有一个表构成的一个唯一数据库),我有 2 个用户:

  • user_A, 谁可以创建和填充my_table,
  • user_B, 谁应该只能从中读取 ( SELECT) 。

碰巧的是,由于我无法控制的 API,user_A不断删除并my_table从头开始重新创建。
这会导致 上的user_B权限重置my_table

因此,我被迫

my_db=# GRANT SELECT on TABLE my_table TO user_B;
Run Code Online (Sandbox Code Playgroud)

每次user_A重新创建my_table.

注意:
我知道(参见。为在 postgresql 中创建的任何新表授予用户权限)只能为授予它们的用户创建的对象设置默认权限(即,user_B为创建的表设置默认权限会更容易)by user_B)——但这里的情况并非如此。

此外,如上面链接的问题所述,文档指定“您只能更改将由您自己或您所属的角色创建的对象的默认权限”
所以我可以有

CREATE ROLE super_role;
GRANT super_role TO user_A;
GRANT super_role TO user_B;
Run Code Online (Sandbox Code Playgroud)

然后SET ROLE super_roleuser_A创建表之前......但不幸的是我无法控制如何user_A创建它。

问题默认情况下,
我如何才能在由创建的表上?GRANT SELECTuser_Buser_A

Lau*_*lbe 7

PostgreSQL 具有默认权限,这是满足您需求的完美工具:

ALTER DEFAULT PRIVILEGES FOR ROLE user_a
   GRANT SELECT ON TABLES TO user_b;
Run Code Online (Sandbox Code Playgroud)

现在user_b将自动获得SELECT对所有由user_a.