Sie haben die Abkürzung gefunden, um Berechtigungen für alle vorhandenen Tabellen im angegebenen Schema festzulegen. Das Handbuch verdeutlicht :
(aber beachten Sie, dass in ALL TABLES
Betracht gezogen wird , umfassen Ansichten und ausländische Tabellen ).
Meine kühne Betonung. serial
Spalten werden mit nextval()
einer Sequenz als Spaltenstandard implementiert und zitieren das Handbuch :
Für Sequenzen ermöglicht dieses Privileg die Verwendung der Funktionen currval
und nextval
.
Wenn also serial
Spalten vorhanden sind , möchten Sie auch Sequenzen gewähren USAGE
(oder ALL PRIVILEGES
)
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Hinweis: Identitätsspalten in Postgres 10 oder höher verwenden implizite Sequenzen, für die keine zusätzlichen Berechtigungen erforderlich sind. (Erwägen Sie das Aktualisieren von serial
Spalten.)
Was ist mit neuen Objekten?
Sie interessieren sich auch DEFAULT PRIVILEGES
für Benutzer oder Schemata :
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 Objekte festgelegt, die in Zukunft automatisch erstellt werden - jedoch nicht für bereits vorhandene Objekte.
Standardberechtigungen werden nur auf Objekte angewendet, die vom Zielbenutzer erstellt wurden ( FOR ROLE my_creating_role
). Wenn diese Klausel weggelassen wird, wird standardmäßig der aktuelle Benutzer ausgeführt ALTER DEFAULT PRIVILEGES
. Um explizit zu sein:
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 aufweisen und Standardberechtigungen im SQL-Bereich anzeigen , auch wenn sie nicht für die aktuelle Rolle gelten. Stellen Sie sicher, dass Sie die FOR ROLE
Klausel beim Kopieren des SQL-Skripts manuell anpassen .
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
Woher weiß es beim Ausführen , welche Datenbank?SCHEMA foo
kann in verschiedenen Datenbanken existieren?Meine Antwort ähnelt der auf ServerFault.com .
Konservativ sein
Wenn Sie konservativer sein möchten, als "alle Berechtigungen" zu gewähren, sollten Sie etwas Ähnliches ausprobieren.
Die Verwendung von
public
dort bezieht sich auf den Namen des Standardschemas, das für jede neue Datenbank / jeden neuen Katalog erstellt wurde. Ersetzen Sie durch Ihren eigenen Namen, wenn Sie ein Schema erstellt haben.Zugriff auf das Schema
Um überhaupt auf ein Schema zugreifen zu können, muss dem Benutzer für jede Aktion "Nutzungsrechte" gewährt werden. Bevor ein Benutzer auswählen, einfügen, aktualisieren oder löschen kann, muss einem Benutzer zunächst eine "Verwendung" für ein Schema gewährt werden.
Sie werden diese Anforderung bei der ersten Verwendung von Postgres nicht bemerken. Standardmäßig hat jede Datenbank ein erstes Schema mit dem Namen
public
. Standardmäßig wurden jedem Benutzer automatisch "Nutzungsrechte" für dieses bestimmte Schema gewährt. Wenn Sie ein zusätzliches Schema hinzufügen, müssen Sie explizit Nutzungsrechte gewähren.Auszug aus dem Postgres-Dokument :
Weitere Informationen finden Sie in der Frage: Was genau macht GRANT USAGE ON SCHEMA? . Achten Sie besonders auf die Antwort des Postgres-Experten Craig Ringer .
Bestehende Objekte versus Zukunft
Diese Befehle wirken sich nur auf vorhandene Objekte aus. Tabellen und dergleichen, die Sie in Zukunft erstellen, erhalten Standardberechtigungen, bis Sie die obigen Zeilen erneut ausführen. Siehe die andere Antwort von Erwin Brandstetter , um die Standardeinstellungen zu ändern und damit zukünftige Objekte zu beeinflussen.
quelle