PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gewähren Sie einer Gruppenrolle in PostgreSQL alle für ein bestimmtes Schema in der Datenbank

Sie haben die Abkürzung gefunden, um Berechtigungen für alle vorhandenen festzulegen Tabellen im gegebenen Schema. Das Handbuch verdeutlicht:

(aber beachten Sie, dass ALL TABLES gilt als Aufrufe enthalten und ausländische Tabellen ).

Fette Hervorhebung von mir. serial Spalten werden mit nextval() implementiert auf eine Sequenz als Spaltenvorgabe und unter Angabe des Handbuchs:

Für Sequenzen erlaubt dieses Privileg die Verwendung von currval und nextval Funktionen.

Also wenn es serial gibt -Spalten sollten Sie auch USAGE gewähren (oder ALL PRIVILEGES ) auf Sequenzen

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Hinweis:Identitätsspalten in Postgres 10 oder höher verwenden implizite Sequenzen, die keine zusätzlichen Berechtigungen erfordern. (Erwägen Sie ein Upgrade von serial Spalten.)

Was ist mit neu Objekte?

Sie werden auch an DEFAULT PRIVILEGES interessiert sein für Benutzer oder Schemas:

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

Dadurch werden Berechtigungen für zukünftig erstellte Objekte automatisch festgelegt - nicht jedoch für bereits vorhandene Objekte.

Standardrechte sind nur angewendet auf Objekte, die vom Zielbenutzer erstellt wurden (FOR ROLE my_creating_role ). Wenn diese Klausel weggelassen wird, wird standardmäßig der aktuelle Benutzer verwendet, der ALTER DEFAULT PRIVILEGES ausführt . Um es explizit zu sagen:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

Beachten Sie auch, dass alle Versionen von pgAdmin III einen subtilen Fehler und eine Anzeige haben Standardberechtigungen im SQL-Bereich, auch wenn sie nicht für die aktuelle Rolle gelten. Stellen Sie sicher, dass Sie FOR ROLE anpassen -Klausel manuell beim Kopieren des SQL-Skripts.