Default Privileges auf Sequenzen

Wonka

Benutzer
Beiträge
17
Hallo,

ich habe einen Benutzer mit beschränkten Berechtigungen auf ein Schema. Dieses beinhaltet auch das Einfügen / Insert von Datensätzen.

Auf alle bestehenden Tabellen vergebe ich folgende Privilegien:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA MY_SCHEMA TO MY_USER;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA MY_SCHEMA TO MY_USER;
-> das funktioniert auch und ich kann Datensätze einfügen.

Nun soll der Benutzer aber in alle aktuellen, und auch neuen Tabellen des Schemas schreiben dürfen, weshalb ich eine neue Tabelle in dem Schema angelegt habe. Wenn ich nun ein Insert mache, bekomme ich die Fehlermeldung
SQL-Fehler [42501]: ERROR: permission denied for sequence my_new_table_id_seq

Mit
ALTER DEFAULT PRIVILEGES IN SCHEMA MY_SCHEMA GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO MY_USER;
gebe ich dem Benutzer bereits für zukünftige Tabellen die Berechtigungen zum Lesen, Schreiben, Updaten, Löschen.

Ich finde aber kein Pendant zum Grant usage, select on all sequences für die default privileges.

Könnt ihr mir weiterhelfen, was ich tun muss? Unschön wäre es jedes Mal beim Anlegen einer neuen Tabelle das Grant auf Sequences manuell ausführen zu müssen.

Vielen Dank und viele Grüße
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.848
Code:
postgres=# create user foo;
CREATE ROLE
postgres=# create schema foo;
CREATE SCHEMA
postgres=# alter default privileges for user foo in schema foo grant usage, select on sequences to foo;
ALTER DEFAULT PRIVILEGES

sollte sein, was du suchst.
 

Wonka

Benutzer
Beiträge
17
Danke dir! Ich kann das Statement erfolgreich ausführen als Benutzer MY_USER. Wenn ich dann aber mit einem anderen Benutzer (MY_USER hat dazu keine Berechtigung) eine neue Tabelle anlegen, dann bekomme ich wieder dieselbe Fehlermeldung, dass MY_USER die Sequenz der neuen Tabelle nicht verwenden darf.

Versuche ich das Statement als der Benutzer auszuführen, der die Tabelle angelegt hat (welcher der einzige ist und sein wird, der das darf), dann bekomme ich folgende Fehlermeldung:

SQL-Fehler [42501]: ERROR: must be member of role "my_user"

So wirklich hilfreiches habe ich zu der Fehlermeldung leider nicht gefunden. Wie bekomme ich denn meinen Benutzer ADMIN, der laut PostgreSql gar keine Rolle ist, dazu, das ausführen zu dürfen? Ich habe es mit

GRANT MY_USER TO ADMIN

probiert und bekam daraufhin die Meldung, dass ADMIN gar nicht existiere.
 

akretschmer

Datenbank-Guru
Beiträge
9.848
also es geht kürzer:

Code:
postgres=# alter default privileges in schema foo grant usage, select on sequences to foo;
ALTER DEFAULT PRIVILEGES

Und du mußt das natürlich dem User/der Rolle zuweisen, die das dann später macht.
 
Werbung:

Wonka

Benutzer
Beiträge
17
Danke dir! Ich bilde mir ein etwas ähnliches auch gehabt zu haben, da ich für die Sequence-Geschichte einfach nur das SELECT, INSERT, UPDATE,DELETE-Alter-Statement angepasst hatte. Aber offenbar war es doch anders, da dein Statement jetzt funktioniert hat. Ich führe es als ADMIN aus (der später auch den Benutzer MY_USER anlegt), lege als ADMIN eine neue Tabelle an und kann dann mit MY_USER reinschreiben.

Vielen Dank nochmals und viele Grüße!
 
Oben