Per Sql einen Read-Only Benutzer erstellen

Hallo,

ich versuche auf meiner Postgres 13.4 Instanz einen Read-Only-Benutzer per SQL anzulegen. Da die DB bei einem Cloud-Anbieter läuft habe ich nur Zugriff über PGadmin.

Ich habe gelesen, dass ich einen Benutzer, der nur lesenden Zugriff auf die bereits bestehenden und zukünftig angelegten Views und Tabellen hat, indem man folgendes ausführt:

CREATE USER my_user WITH PASSWORD '123456';

GRANT CONNECT ON DATABASE postgres TO my_user;

GRANT USAGE ON SCHEMA my_schema TO my_user;

ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema GRANT SELECT ON TABLES TO my_user;

Wenn ich mit dem Benutzer eine Abfrage

select * from my_schema.my_table;

abschicke bekomme ich den Fehler

“ERROR: permission denied for table my_table
SQL state: 42501”

Wenn ich statt

ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema GRANT SELECT ON TABLES TO my_user;
GRANT SELECT ON TABLES TO my_user;

dann habe ich Zugriff auf my_table.

Es scheint also irgendein Problem mit den default Privileges zu geben. Allerdings ist my_user Teil der pg_default_acl-Tabelle.

Die Abfrage

SELECT 
  nspname,         -- schema name
  defaclobjtype,   -- object type
  defaclacl        -- default access privileges
FROM pg_default_acl a JOIN pg_namespace b ON a.defaclnamespace=b.oid;

bringt mir folgende Ausgabe:

nspname | defaclobjtype | defaclacl
my_schema | r | (another_user=r/another_user)
ma_schema | r | (my_user=r/dbAdmin)

Könnt ihr mir weiterhelfen, wie ich meine Anforderung umsetzen kann? Wichtig wäre, dass ich auch direkt für zukünftige Tabellen/Views in dem Schema my_schema den Zugriff ermöglichen kann.

Danke und Grüße!

Mit ALTER DEFAULT PRIVILEGES setzt Du die Privs für SPÄTER erstellte Tabellen, nicht aber für bereits bestehende. Was Du suchst ist

GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
1 „Gefällt mir“

Aaaahhhhhh, Dankeschön! Ich hatte es so verstanden, dass die “Alter Default Privileges”-Anweisungen für jetzige und zukünftige Tabellen und Views gilt.

Mit deiner zusätzlichen Anweisung hat es jetzt auch bei bestehenden Tabellen und Views geklappt. :wink:

Ein schönes Wochenende und viele Grüße!

1 „Gefällt mir“