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!
Sebastian
>
> 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)_