Vous avez au moins deux options.
Le premier utilise une petite requête et un éditeur de texte. Nous devons collecter les schémas de notre intérêt:
SELECT nspname
FROM pg_namespace;
Vous pouvez ajouter une WHERE
clause si vous souhaitez limiter la portée. Copiez la sortie et modifiez-la pour obtenir un certain nombre de GRANT USAGE ON SCHEMA ... TO your_role;
commandes. Ensuite, alimentez-le psql
, par exemple:
psql -f multigrant.sql
Une variante habituelle de ceci pourrait être un script shell qui boucle sur les noms et les appels collectés psql
, en passant l' GRANT
instruction construite à l' -c
option.
L'autre solution fait essentiellement la même chose dans un bloc pl / pgsql, créant une requête dynamique. Le noyau est le même - nous devons collecter les schémas. Ensuite, nous les parcourons tous, en accordant les autorisations schéma par schéma:
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$;
Remarques :
- contrairement aux tableaux, séquences, fonctions et types, on ne peut pas définir de privilèges par défaut pour les schémas (à partir de 9.4). Vous devrez accorder ce privilège pour tout schéma nouvellement ajouté manuellement.
- ici, j'utilise la cotation en dollars lors de la construction de la requête dynamique. Cela me permet d'utiliser la syntaxe «normale», par opposition à la multiplication de guillemets simples, par exemple (non présente dans cet exemple). De cette façon, la plupart des éditeurs mettront en valeur les déclarations.
- J'utilise également
format()
avec le %I
spécificateur de format pour avoir le nom d'objet correctement cité si nécessaire. Cette approche est beaucoup plus lisible que la construction de la requête avec concaténation de constantes de chaîne et de certains quote_ident()
appels.
pg_namespace
peut être trouvé dans le pg_catalog
schéma. Découvrez les autres objets qui s'y trouvent - ils stockent tous les aspects de vos schémas, tables, etc.
grant usage
pour le nouveau schéma.Vous pouvez également utiliser.
la source