我希望有几个用户能够创建模式和表。这个模式(和表)应该对所有人可用。我想设置数据库,并设置所有权限(以及使用 ALTER DEFAULT PRIVILEGES 的未来权限)。用户之后不必更改任何权限。
这些模式是使用客户端软件创建的,在这种情况下是 QGIS。因此,用户只能发出CREATE SCHEMA newschemaname
.
问题是,即使用户属于同一组,他们也无法看到彼此的模式。
无法访问其他人的架构
我正在使用两个角色进行测试。用户admin1
和admin2
,都属于grp_admin
:
CREATE ROLE grp_admin NOLOGIN;
-- one user should be able to create db and extensions; these permissions are not inherited
CREATE ROLE admin1 WITH PASSWORD 'test2k19' LOGIN inherit SUPERUSER CREATEDB CREATEROLE;
GRANT grp_admin TO admin1;
CREATE ROLE admin2 WITH PASSWORD 'test2k19' LOGIN inherit;
GRANT grp_admin TO admin2;
作为admin1
,我创建了一个新数据库,并授予了一些权限(以及未来对象的权限):
CREATE DATABASE people;
\c people
-- To create schemas and tables
GRANT ALL PRIVILEGES ON DATABASE people TO grp_admin;
ALTER DEFAULT PRIVILEGES GRANT select, INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO grp_admin;
ALTER DEFAULT PRIVILEGES GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO grp_admin;
ALTER DEFAULT PRIVILEGES GRANT EXECUTE ON FUNCTIONS TO grp_admin;
如果,作为用户,admin1
我创建了一个新的模式和表,另一个admin2
人无权访问它:
create schema archive;
create table archive.vip ( thename varchar);
insert into archive.vip values ('Fernão de Magalhães');
作为admin2
:
select * from archive.vip;
ERROR: 42501: permission denied for schema archive
LINE 1: select * from archive.vip;
能够访问其他人的架构
如果我authorization grp_admin
在创建架构时使用,它可以工作。作为用户admin1
:
create schema future authorization grp_admin;
create table future.vip ( thename varchar);
insert into future.vip values ('Robot 5126');
作为用户admin2
:
select * from future.vip;
thename
------------
Robot 5126
问题
由于用户正在使用 QGIS(客户端应用程序)创建模式,因此仅发布CREATE SCHEMA newschemaname
,用户无法相互共享模式和表。
我怎样才能让第二次admin2
访问admin1
创建的模式?(在创建每个架构后不发出 GRANT 权限)。
您忘记为模式设置默认权限: