有很多类似的问题,但我仍然无法理解一些简单的关于 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
编辑?
最佳答案
您需要在创建表之前SET ROLE
,以便角色成为表所有者。
只允许表所有者ALTER
表。
关于postgresql - 由同一组的用户拥有的 ALTER postgres 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976019/