У вас є як мінімум два варіанти.
Перший використовує невеликий запит та текстовий редактор. Ми маємо зібрати схеми, які нас цікавлять:
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
нову схему.