我正在使用PostgreSQL 9.5。
我有一个包含多个模式的数据库,我希望用户能够对其中一个模式中的所有表进行选择,更新,插入和删除。
我习惯使用PSQL代码来创建角色:
DROP ROLE IF EXISTS myrole ;
CREATE ROLE myrole WITH
LOGIN
PASSWORD 'myrole'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION
;
GRANT a_user_group TO myrole;
ALTER ROLE myrole VALID UNTIL 'infinity' ;
\connect mydatabase ;
GRANT ALL PRIVILEGES ON SCHEMA myschema TO myrole;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema TO myrole;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschema TO myrole;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT ALL PRIVILEGES ON SEQUENCES TO myrole ;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT ALL PRIVILEGES ON TABLES TO myrole ;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO myrole ;
我认为这应该足够但我不能对这个用户进行INSERT。我只能做SELECT而且我很确定它是因为组a_user_group具有此权限。
我找不到如何使这个工作。有什么想法吗?
答案 0 :(得分:0)
问题解决了!
每当我尝试使用前面提到的角色访问有罪的序列并且读取pgAdmin错误时,pgAdmin崩溃后,我开始怀疑角色的状态有问题。
所以我使用
删除了角色 REVOKE ALL PRIVILEGES ON SCHEMA traitements FROM zones_delaissees_traitements ;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA traitements FROM zones_delaissees_traitements ;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA traitements FROM zones_delaissees_traitements ;
ALTER DEFAULT PRIVILEGES IN SCHEMA traitements REVOKE ALL PRIVILEGES ON SEQUENCES FROM zones_delaissees_traitements ;
ALTER DEFAULT PRIVILEGES IN SCHEMA traitements REVOKE ALL PRIVILEGES ON TABLES FROM zones_delaissees_traitements ;
DROP ROLE IF EXISTS zones_delaissees_traitements ;
再次创建它,现在它可以工作了!