it-swarm.com.de

Postgres: Berechtigung für Beziehung für Benutzer read_only verweigert

Ich versuche, einen neuen schreibgeschützten Benutzer in postgres einzurichten. Ich habe die folgenden Schritte ausgeführt, um den neuen Benutzer zu erstellen:

Sudo -u postgres createuser --interactive
    name: read_only_user
    superuser: n
    create database: n
    Create new roles: n

Dann habe ich mich mit dem Benutzer postgres bei postgres angemeldet und die folgenden Befehle ausgeführt:

ALTER USER read_only_user WITH PASSWORD '123456';
GRANT CONNECT ON DATABASE myDB TO read_only_user;
GRANT USAGE ON SCHEMA public TO read_only_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only_user;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO read_only_user;

Aber wenn ich den folgenden Befehl ausführe:

SELECT * FROM mytable;

Ich erhalte den folgenden Fehler:

ERROR:  permission denied for relation mytable

Wenn ich mit dem Postgres-Konto angemeldet bin, kann ich die folgenden Einstellungen anzeigen - aber ich sehe nicht, was fehlt. Ich habe viele andere Fragen/Antworten hier überprüft, konnte aber den Grund für die fehlende Erlaubnis nicht finden.

Liste der Rollen:

Role name        |                         Attributes                         | Member of
-----------------+------------------------------------------------------------+-----------
 some_user       | Superuser, Create role, Create DB                          | {}
 read_only_user  |                                                            | {}
 postgres        | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

Liste der Datenbanken:

   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 myDB      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =Tc/postgres         +
           |          |          |            |            | postgres=CTc/postgres+
           |          |          |            |            | read_only_user=c/postgres
[...]

Liste der Schemata:

  Name  |  Owner   |  Access privileges         |      Description
--------+----------+----------------------------+------------------------
 public | postgres | postgres=UC/postgres+      | standard public schema
        |          | =UC/postgres+              |
        |          | read_only_user=U/postgres  |

Zugriffsrechte:

 Schema |       Name        |   Type   |     Access privileges           | Column privileges | Policies
--------+-------------------+----------+---------------------------------+-------------------+----------
 public | mytable           | table    | postgres=arwdDxt/postgres+      |                   |
        |                   |          | read_only_user=r/postgres       |                   |
 public | mytable_id_seq    | sequence | postgres=rwU/postgres+          |                   |
        |                   |          | read_only_user=rU/postgres      |                   |
5
mgerbracht

Anstatt den Zugriff innerhalb der Shell zu gewähren, versuchen Sie dies außerhalb der Postgres-Shell wie folgt

$ Sudo -u postgres psql -d myDB -c "GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only_user"

$ Sudo -u postgres psql -d myDB -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only_user"
1
Basavaraju US