有很多类似的问题,但我仍然无法理解有关 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拥有alice和ALTER被拥有bjork吗?