有很多类似的问题,但我仍然无法理解一些简单的关于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
'ing ROLE
to scientists
也没有帮助(它不应该,因为INHERIT
)
set role scientists;
ALTER TABLE test_table ADD COLUMN column_b TEXT;
ERROR: must be owner of relation test_table
型
我错过了什么?有没有可能让alice
拥有test_table
,ALTER
被bjork
拥有?
1条答案
按热度按时间fxnxkyjh1#
您需要在创建表之前 *
SET ROLE
*,以便角色成为表的所有者。只有表的所有者才能
ALTER
表。