有很多类似的问题,但我仍然无法理解关于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
可以读取,写入,但ALTER
和DROP
都不能:
\c - bjork
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR: must be owner of relation test_table
SET
'ROLE
scientists
对INHERIT
也无济于事(因为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}}?
答案 0 :(得分:1)
在创建表之前,您需要SET ROLE
,以便该角色成为表所有者。
只允许表所有者ALTER
表格。