Ich versuche, einem neuen postgres-Benutzer (nicht dem Eigentümer) alle Berechtigungen für alle Tabellen einer bestimmten Datenbank zu gewähren. Es scheint, dass GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
das nicht geht. Nach erfolgreicher Ausführung des Befehls (als postgres-Benutzer) erhalte ich als new_user Folgendes:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Zwei Fragen:
1) Was macht der obige Befehl, wenn nicht alle Berechtigungen für alle Tabellen in my_db erteilt werden?
2) Wie kann ein Benutzer alle Berechtigungen für alle Tabellen ordnungsgemäß erteilen? (auch für alle zukünftig erstellten Tabellen)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
oder Sie können keine Datensätze einfügen.Es ist möglich, mehrere Anmeldungen als Datenbankeigentümer einzurichten:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Wenn sich nun Benutzer1 oder Benutzer2 anmelden, haben sie alle Berechtigungen für "mydb", ohne dass weitere Berechtigungen erforderlich sind.
Ich würde diese Lösung jedoch sorgfältig prüfen. Es ist verlockend, wenn Ihre Webanwendung eine dieser Anmeldungen verwendet, um zu vermeiden, dass bei jeder Aktualisierung des Schemas zusätzliche Berechtigungen erstellt werden müssen. Auf diese Weise entfernen Sie jedoch eine sehr nützliche Form des Schutzes. Verwenden Sie die obige Lösung, wenn Sie wirklich mehrere "Administratoren" möchten, aber das obige Muster "Gewähren Sie alle Berechtigungen für alle Tabellen im Schema ..." für die Anmeldung für Ihre Anwendung "für den normalen Gebrauch" einhalten möchten.
quelle