来自同一组的用户拥有的ALTER postgres表

时间:2017-10-27 13:19:01

标签: postgresql

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

我希望拥有一个属于同一组的多个用户的数据库。当其中一个用户创建表时,其他用户应该能够像使用自己创建表一样使用它。我可以在某种程度上使它工作,但ALTER和DROP仍然是一个谜。

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

CREATE DATABASE test_db;
\c test_db 

CREATE ROLE alice LOGIN INHERIT;
CREATE ROLE bjork LOGIN INHERIT;

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

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;

alice创建一个表格:

\c - alice
CREATE TABLE test_table (column_a TEXT);

bjork可以读取,写入,但ALTERDROP都不能:

\c - bjork 
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR:  must be owner of relation test_table

SET'ROLE scientistsINHERIT也无济于事(因为set role scientists; ALTER TABLE test_table ADD COLUMN column_b TEXT; ERROR: must be owner of relation test_table }

test_table

我错过了什么?甚至可能alice拥有ALTER bjork和{{1}} {{1}}?

1 个答案:

答案 0 :(得分:1)

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

只允许表所有者ALTER表格。