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!