34 Stimmen

Wie erstellt man einen Benutzer mit Leseberechtigung für alle Datenbanken in Postgresql?

Ich möchte einen Benutzer erstellen, der nur über eine Auswahlberechtigung für alle Tabellen in allen Datenbanken verfügt. Ich dachte, ich könnte eine Liste von Datenbanken erhalten und den folgenden Befehl für jede Datenbank anwenden:

GRANT select ON DATABASE dbname to user1;

Ich erhalte jedoch die folgende Fehlermeldung:

ERROR:  invalid privilege type SELECT for database

Als ich gegoogelt habe, rieten mir die Leute, das grant select Operation für alle Tabellen. Aber es werden ständig neue Tabellen hinzugefügt. Dies ist also keine akzeptable Lösung für mich. Kennt jemand eine Umgehungslösung?

2voto

emrekgn Punkte 564

Ich bin mir bewusst, dass dies eine sehr alte Frage ist, aber sie taucht immer noch auf, wenn ich nach diesem Problem suche, also poste ich dies einfach, um eine aktuelle Antwort zu erhalten.

Ab Postgres 14 oder neuer gibt es jetzt vordefinierte Rollen zu diesem Zweck:

CREATE USER your_readonly_user WITH PASSWORD 'changeme';
GRANT pg_read_all_data TO your_readonly_user;

Den Unterlagen zufolge erhalten Sie damit alle erforderlichen Berechtigungen, um:

"Lesen aller Daten (Tabellen, Ansichten, Sequenzen), als ob Sie SELECT-Rechte auf diese Objekte hätten, und USAGE-Rechte auf alle Schemata, auch ohne dies explizit zu haben. Bei dieser Rolle ist das Rollenattribut BYPASSRLS nicht gesetzt. Wenn RLS verwendet wird, kann ein Administrator BYPASSRLS auf Rollen setzen, denen diese Rolle GRANTed ist."

Siehe これ für weitere Informationen zu den vordefinierten Rollen.

1voto

yucer Punkte 3621

Versuchen Sie es:

CREATE USER readonly WITH ENCRYPTED PASSWORD 'yourpassword';
GRANT CONNECT ON DATABASE <database_name> to readonly;
GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X