PostgreSQL: невозможно вставить в таблицу из-за разрешений
Я использую 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 имеет эту привилегию.
Я не могу найти, как заставить это работать. Любая идея?
1 ответ
Задача решена!
После сбоя 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 ;
И создал его снова, и теперь это работает!