Rechte von Stored Procedures

Hallo,

mit welchen Benutzerrechten werden eigentlich Funktionen ausgeführt? Ich meine jetzt nicht, mit welchen sie “aufgerufen” werden können, sondern mit welchen sie ablaufen. Denen des aufrufenden Datenbankbenutzers oder allumfassenden Zugriffsrechten? Ich vermute letzteres?
Angenommen, ein User besitze keine Rechte an einer Relation (kein SELECT, INSERT, UPDATE, … auf der Tabelle erlaubt). Könnte er dann trotzdem problemlos eine PL/pgSQL Funktion ausführen, die in dieser Relation Datensätze löscht, sofern er die Ausführungsrechte für die “stored procedure” hat? Oder müsste man der Stored Procedure vorher auch mit GRANT oder so Rechte erteilen? D.h. darf eine Funktion grundsätzlich alles, egal, wer sie ausführt?

Viele Grüße und danke für ein bisschen Aufklärung! :wink:
Sebastian

Das kannst Du festlegen, entweder SECURITY DEFINER oder INVOKER.

Doku lesen!

Andreas

Ahh, vielen Dank für den Tipp! :slight_smile: Genau das meinte ich.
Habe ich wohl übersehen.

Für alle anderen, die noch mal nach dem Thema suchen:

[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER

>
> SECURITY INVOKER gibt an, dass die Funktion mit den Privilegien des Benutzers, der sie aufruft, ausgeführt werden soll. (Das ist die Voreinstellung.) SECURITY DEFINER gibt an, dass die Funktion mit den Privilegien des Benutzers, der sie erzeugt hat, aufgerufen werden soll.

_Quelle: [CREATE FUNCTION](http://www.postgresql.org/files/documentation/books/pghandbuch/html/sql-createfunction.html)_