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.