ALTER postgres 表由同一组的用户拥有

psa*_*rka 8 postgresql

有很多类似的问题,但我仍然无法理解有关 postgres ALTER、DROP、角色和权限的一些简单内容。

我想要一个包含属于同一组的多个用户的数据库。当其中一个用户创建表时,其他人应该能够像他们自己创建一样使用它。我可以让它在某种程度上发挥作用,但 ALTER 和 DROP 仍然是个谜。

例如,我从头开始创建一个包含两个用户的数据库:

CREATE DATABASE test_db;
\c test_db 

CREATE ROLE alice LOGIN INHERIT;
CREATE ROLE bjork LOGIN INHERIT;
Run Code Online (Sandbox Code Playgroud)

然后我创建一个组并将用户分配到该组:

CREATE ROLE scientists;
GRANT scientists TO alice;
GRANT scientists TO bjork;
ALTER DEFAULT PRIVILEGES FOR ROLE alice GRANT ALL ON TABLES to scientists;
ALTER DEFAULT PRIVILEGES FOR ROLE bjork GRANT ALL ON TABLES to scientists;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES to scientists;
Run Code Online (Sandbox Code Playgroud)

alice创建一个表:

\c - alice
CREATE TABLE test_table (column_a TEXT);
Run Code Online (Sandbox Code Playgroud)

bjork可以读、写,但既不能ALTER,也不能DROP

\c - bjork 
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR:  must be owner of relation test_table
Run Code Online (Sandbox Code Playgroud)

SET'ing ROLEtoscientists也没有帮助(也不应该,因为INHERIT

set role scientists;
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR:  must be owner of relation test_table
Run Code Online (Sandbox Code Playgroud)

我缺少什么?甚至有可能被test_table拥有aliceALTER被拥有bjork吗?

Lau*_*lbe 5

您需要在创建表SET ROLE 之前,使该角色成为表所有者。

仅允许表所有者访问ALTER该表。