Trigger hat nich genug Privilegien

Ich habe in meiner DB für alle von “normalen” Benutzern nutzbaren Tabellen Views angelegt, die die Zugriffsrechte einschränken. Z.B. kann ein Benutzer von einer bestimmten Tabelle nur ausgewählte Zeilen sehen oder er kann zwar alles sehen aber nichts ändern. Auf die Tabellen kann nur der DB Owner direkt zugreifen.

Das Problem ist nun folgendes:
Wenn ein Benutzer aus einer Tabelle etwas löscht, so geschieht dies auch über einen View und funktioniert auch. In der Tablle ist allerdings ein OnDelete Trigger, der in einer weiteren Tabelle Einträge löscht. UND DAS FUNKTIONIERT NICHT. Aus irgend einem Grund werden die Permissions nicht an den Trigger weiter gereicht und das Delete in der Triggerfunktion scheitert mit permission denied.

Kann man das irgenwie ändern oder war es keine gute Entscheidung, die Zugriffsrechte mit einer eigenen User Tabelle und über Views zu machen?

Kennst Du SECURITY DEFINER?

Andreas

Nein, kannte ich noch nicht. Sehr guter Hinweis.

Bleibt bei mir nur noch eine Frage: Ist der DEFINER eigentlich der Owner? Wenn ich zum Beispiel nachträglich einen anderen User als Owner definiere, wer ist dann der DEFINER? Der erste Ersteller oder der aktuelle Owner?

Bei einer Funktion? Der, der sie definiert, ist auch der owner, ausgeführt wird sie aber im Context des Benutzers, der sie ausführt. es sei denn, man setzt SECURITY DEFINER. Dann hat sie die Rechte des Definers. So erstellte Funktionen verhelfen also dem nutzenden User zu mehr bzw. anderen Rechten, dies sollte man beachten.

Änderst Du den Owner einer Function und diese ist security definer, dann schlägt das natürlich durch.

Andreas

@akretschmer: Danke, das hat mir den Tag gerettet!