У вас есть как минимум два варианта.
Первый использует небольшой запрос и текстовый редактор. Мы должны собрать схемы нашего интереса:
SELECT nspname
FROM pg_namespace;
Вы можете добавить WHERE
предложение, если хотите ограничить область действия. Скопируйте вывод и исправьте его, чтобы получить ряд GRANT USAGE ON SCHEMA ... TO your_role;
команд. Затем просто введите его psql
, например:
psql -f multigrant.sql
Обычным вариантом этого может быть сценарий оболочки, который перебирает собранные имена и вызовы psql
, передавая построенный GRANT
оператор -c
опции.
Другое решение в основном делает то же самое в одном блоке pl / pgsql, создавая динамический запрос. Ядро то же самое - мы должны собрать схемы. Затем мы перебираем их все, предоставляя схему разрешений по схеме:
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
Примечания :
- в отличие от таблиц, последовательностей, функций и типов, нельзя установить привилегии по умолчанию для схем (с 9.4). Вы должны будете предоставить эту привилегию для любой вновь добавленной схемы вручную.
- здесь я использую котировки доллара при построении динамического запроса. Это позволяет мне использовать «нормальный» синтаксис, в отличие от умножения одинарных кавычек, например (не представлен в этом примере). Таким образом, большинство редакторов будут хорошо освещать утверждения.
- Я также использую
format()
с %I
спецификатор формата , чтобы иметь имя объекта цитироваться при необходимости. Этот подход гораздо более читабелен, чем построение запроса с конкатенацией строковых констант и некоторыми quote_ident()
вызовами.
pg_namespace
можно найти в pg_catalog
схеме. Проверьте другие объекты там - они хранят каждый аспект ваших схем, таблиц и так далее.
grant usage
новую схему?Вы тоже можете использовать.
источник