GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
Der schreibgeschützte Benutzer kann eine Verbindung herstellen, siehe Tabellen, aber wenn er versucht, eine einfache Auswahl zu treffen, erhält er:
ERROR: permission denied for relation mytable
SQL state: 42501
Dies geschieht unter PostgreSQL 9.1
Was habe ich falsch gemacht?
postgresql
Sorin
quelle
quelle
Antworten:
Hier ist die Komplettlösung für PostgreSQL 9+, die kürzlich aktualisiert wurde.
Vielen Dank an https://jamie.curle.io/creating-a-read-only-user-in-postgres/ für einige wichtige Aspekte
Wenn jemand kürzeren Code findet und vorzugsweise einen, der dies für alle vorhandenen Datenbanken ausführen kann, ein zusätzliches Lob.
quelle
GRANT ALL
erteilen Sie dem schreibgeschützten Benutzer standardmäßig die Berechtigung?\ddp
. Sollte genau=r/
wiegranting_user=r/readonly_user
bei schreibgeschütztem Zugriff angezeigt werden.Versuchen Sie hinzuzufügen
Sie waren sich wahrscheinlich nicht bewusst, dass Sie die erforderlichen Berechtigungen für ein Schema benötigen, um Objekte im Schema verwenden zu können.
quelle
psql
alspostgres
Benutzer aus und erhalte eine ordnungsgemäße Antwort.GRANT
. Wenn ich jedoch auf die ACL in den Tabellen schaue, sehe ich nur zwei andere Konten, eines ist der Datenbankeigentümerjirauser
und ein anderes schreibgeschütztes Konto mit dem Namenqauser
. Aber meinereadonly
erscheint dort nicht. Postgres ist Version 9.1 und ich habe sogar den Server neu gestartet, es passiert immer noch nichts.Das hat bei mir funktioniert:
Überprüfen Sie die aktuelle Rolle, bei der Sie angemeldet sind, indem Sie Folgendes verwenden: SELECT CURRENT_USER, SESSION_USER;
Hinweis : Es muss mit dem Eigentümer des Schemas übereinstimmen.
Schema | Name | Geben Sie | ein Besitzer
-------- + -------- + ------- + ----------
Wenn der Eigentümer anders ist, geben Sie alle Berechtigungen für die aktuelle Benutzerrolle von der Administratorrolle durch:
GRANT 'ROLE_OWNER' an 'CURRENT ROLENAME';
Versuchen Sie dann, die Abfrage auszuführen. Sie gibt die Ausgabe aus, da sie jetzt Zugriff auf alle Beziehungen hat.
quelle
Stellen Sie sicher, dass Ihr Benutzer Attribute für seine Rolle hat. beispielsweise:
nach dem Ausführen des folgenden Befehls:
es hat das Problem behoben.
Rollen und Dinge finden Sie im Tutorial hier: https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
quelle
ERROR: permission denied for relation mytable
Sie sollten die nächste Abfrage ausführen:
Wenn sich Ihr Fehler in einer Ansicht befindet, verfügt die Tabelle möglicherweise nicht über die Berechtigung. Daher sollten Sie die nächste Abfrage ausführen:
quelle
ALTER DROP DELETE
zunichte , den Benutzer "ReadOnly" zu nennen, wenn Sie Ect angeben. An diesen Benutzer ...