Sie haben mindestens zwei Möglichkeiten.
Die erste verwendet eine kleine Abfrage und einen Texteditor. Wir müssen die Schemata unseres Interesses sammeln:
SELECT nspname
FROM pg_namespace;
Sie können eine WHERE
Klausel hinzufügen , wenn Sie den Bereich einschränken möchten. Kopieren Sie die Ausgabe und ändern Sie sie, sodass Sie eine Reihe von GRANT USAGE ON SCHEMA ... TO your_role;
Befehlen erhalten. Dann füttere es einfach psql
, zum Beispiel:
psql -f multigrant.sql
Eine übliche Variante davon könnte ein Shell-Skript sein, das die gesammelten Namen und Aufrufe psql
durchläuft und die konstruierte GRANT
Anweisung an die -c
Option übergibt .
Die andere Lösung macht im Prinzip dasselbe in einem pl / pgsql-Block und erstellt eine dynamische Abfrage. Der Kern ist derselbe - wir müssen die Schemata sammeln. Dann durchlaufen wir alle und erteilen die Berechtigungen Schema für Schema:
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$;
Anmerkungen :
- Im Gegensatz zu Tabellen, Sequenzen, Funktionen und Typen können für Schemata (ab 9.4) keine Standardberechtigungen festgelegt werden . Sie müssen dieses Privileg für jedes neu hinzugefügte Schema manuell erteilen.
- hier benutze ich Dollar-Anführungszeichen beim Erstellen der dynamischen Abfrage. Dies ermöglicht mir die Verwendung der 'normalen' Syntax im Gegensatz zur Multiplikation von beispielsweise einfachen Anführungszeichen (in diesem Beispiel nicht vorhanden). Auf diese Weise werden die meisten Redakteure die Aussagen gut hervorheben.
- Ich benutze auch
format()
mit dem%I
Formatbezeichner, um den Objektnamen bei Bedarf korrekt in Anführungszeichen zu setzen. Dieser Ansatz ist weitaus lesbarer als das Erstellen der Abfrage mit Verkettung von Zeichenfolgenkonstanten und einigen quote_ident()
Aufrufen.
pg_namespace
finden Sie im pg_catalog
Schema. Schauen Sie sich die anderen Objekte dort an - sie speichern jeden Aspekt Ihrer Schemas, Tabellen usw.
grant usage
für das neue Schema automatisch ausführt.Sie können auch verwenden.
quelle