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.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
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.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Auszug aus dem Postgres-Dokument :
Ermöglicht für Schemas den Zugriff auf Objekte, die im angegebenen Schema enthalten sind (vorausgesetzt, die eigenen Berechtigungsanforderungen der Objekte werden ebenfalls erfüllt). Dies ermöglicht es dem Berechtigten im Wesentlichen, Objekte innerhalb des Schemas nachzuschlagen. Ohne diese Berechtigung können die Objektnamen weiterhin angezeigt werden, z. B. durch Abfragen der Systemtabellen. Nach dem Widerruf dieser Berechtigung verfügen vorhandene Backends möglicherweise über Anweisungen, die diese Suche zuvor durchgeführt haben. Dies ist also keine vollständig sichere Methode, um den Objektzugriff zu verhindern.
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.