Stimmt es, dass es UNMÖGLICH ist, einen schreibgeschützten Sicherungsbenutzer in PostgreSQL zu erstellen?
Ich wurde in einem IRC-Kanal darauf hingewiesen, dass Sie einfach keinen Benutzer haben können, der nur Sicherungskopien erstellt und keine Eigentumsrechte besitzt. Ich finde es sehr seltsam, deshalb möchte ich sicherstellen, dass mir nichts entgeht.
Im Folgenden habe ich versucht, aber es gibt mir nicht die Ergebnisse, die ich suche. Wenn ich pg_dump
an einem bestimmten Tisch tue, bekomme ich Permission denied for relation...
:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;
Jede Hilfe wäre sehr dankbar!
Antworten:
Nein, es ist einfach (jetzt sowieso).
Erteilen Sie die Verbindungsberechtigung für einen neuen Benutzer
Gewähren Sie die Berechtigungen für alle aktuellen Datenbankobjekte. Dies ist schemaspezifisch und Sie müssen eine Kopie für jedes Schema ausführen, das Ihr Benutzer verwenden soll.
Von der Dokumentation ,
ALL TABLES
enthält alles , was man sich wünschen kann .Dann
ALTER DEFAULT PRIVLEGES
zu gewähren ZukunftSELECT
Privilegien für Objekte noch nicht erstellt.quelle
ALTER DEFAULT PRIVILEGES ... myReadonlyUser
, 2 zusätzliche Leitungen zur Deponie hinzugefügt werden:ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;
. Klingt so, bedeutet dies, dass root an neuen Tabellen nichts mehr tun kann. Ist das wahr?bigint
schreibgeschützt sind, wird dies wahrscheinlich auch erforderlich seinGRANT SELECT ON ALL SEQUENCES
Die einfache und nützliche Möglichkeit besteht darin, einen Superuser mit Leseberechtigung zu erstellen.
psql
als Postgres oder andere Super - User.Erstellen Sie die neue Superuser-Rolle, und legen Sie sie als schreibgeschützt fest:
<PASS>
durch Ihr gewähltes Passwort.backadm
durch den gewählten Benutzernamen ersetzen . (Ich stellebackadm
fürBackup Administrator
).Sie können diese Rolle jetzt zum Sichern verwenden.
quelle
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
oderALTER USER backadm set default_transaction_read_only = off;
weg uneingeschränkten Zugriff auf die Datenbank von mit.Beachten Sie, dass das Blog, auf das in der Antwort von @Gyre verwiesen wird, nicht zum Erstellen eines schreibgeschützten Benutzers "application" (dh zum Erstellen einer schreibgeschützten Rolle für eine Webanwendung zum Herstellen einer Verbindung mit der Datenbank) geeignet ist und möglicherweise ein ernstes Problem darstellt Sicherheitslücke, da sie leicht zu umgehen ist, wie in dieser Antwort auf die Postgresql-Liste erläutert . Zum Nachschlagen, indem der Client die Sitzungseinstellungen überschreibt:
Siehe ‚Verwalten Rechte in postgresql‘ Präsentation in dem Postgres verknüpft Wiki für ein detailliertere Verfahren, ähnlich der in der Frage gepostet.
quelle
Nach dem Testen eines Backups mit der Lösung von Evan Caroll bin ich auf folgenden Fehler gestoßen:
Es fehlt eine weitere Berechtigung:
Durch das Hinzufügen dieser Berechtigung konnte ich mit meinem schreibgeschützten Benutzer eine Sicherungskopie erstellen.
quelle
Ich habe ordentlich recherchiert und es scheint eine Lösung dafür zu geben. Ich bin auf diesen Blog-Beitrag gestoßen, der perfekt erklärt, was getan werden muss. Ich hoffe, das hilft Leuten, die nach der gleichen Antwort suchen wie ich. Offensichtlich ist das Wiederherstellen der Backups auf diese Weise eine andere Frage.
quelle
ALTER USER set default_transaction_read_only = on;
, dass der Benutzer nicht daran gehindert wird , ihn zu ändern.