Назад | Перейти на главную страницу

Как применить PostgreSQL «GRANT ALL ON ALL TABLES» к новым таблицам?

Как обсуждалось в вопросе на GRANT SELECT для всех таблиц в postgresql, начиная с PG 9.0 вы можете массово предоставлять привилегии для всех существующий table пользователю u, используя такую ​​команду, как:

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

Зайдя в систему как u, вы можете сделать это с уже существующей таблицей a:

SELECT * FROM a;

Но если вы сейчас создадите таблицу b и выполните:

SELECT * FROM b;

Ты получаешь:

ERROR: permission denied for relation b
SQL state: 42501

Это можно исправить, повторно выполнив

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

Но это проблема, когда нужно помнить об этом каждый раз, когда вы создаете таблицу.

Есть ли способ заставить PostgreSQL автоматически применять эти глобальные гранты к вновь созданным таблицам?

~ Заранее спасибо ~ Кен

Возможное решение - изменить права по умолчанию для u пользователь:

Например:

alter default privileges in schema public grant all on tables to u;
alter default privileges in schema public grant all on sequences to u;

Описание

ALTER DEFAULT PRIVILEGES позволяет вам установить привилегии, которые будут применяться к объектам, созданным в будущем. (Это не влияет на привилегии, назначенные уже существующим объектам.) В настоящее время можно изменять только привилегии для таблиц (включая представления), последовательностей и функций.

Вы можете изменить права по умолчанию только для объектов, которые будут созданы вами или ролями, членом которых вы являетесь. Привилегии могут быть установлены глобально (т.е.для всех объектов, созданных в текущей базе данных), или только для объектов, созданных в указанных схемах. Привилегии по умолчанию, указанные для каждой схемы, добавляются к глобальным привилегиям по умолчанию для конкретного типа объекта.

Как объяснено в GRANT, привилегии по умолчанию для любого типа объекта обычно предоставляют все предоставляемые разрешения владельцу объекта и могут предоставлять некоторые привилегии для PUBLIC также. Однако это поведение можно изменить, изменив глобальные права по умолчанию с помощью ALTER DEFAULT PRIVILEGES.

видеть: ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ