Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren, Trigger, Batches und benutzerdefinierte Funktionen » Prozeduren

 

Prozeduren und Funktionen zum Ausführen mit Eigentümer- oder Aufruferprivilegien einrichten

Beim Erstellen einer Prozedur oder Funktion können Sie angeben, ob die Prozedur oder Funktion mit den Privilegien ihres Eigentümers ausgeführt werden soll oder mit den Privilegien der Person oder der Prozedur, die sie aufruft (Aufrufer). Die Identifizierung des Aufrufers ist nicht immer offensichtlich. Ein Benutzer kann zwar eine Prozedur aufrufen, aber diese Prozedur kann auch andere Prozeduren aufrufen. In diesen Fällen kann ein Unterschied bestehen zwischen dem angemeldeten Benutzer (dem Benutzer, der den ersten Aufruf der Prozedur der obersten Ebene durchgeführt hat) und dem effektiven Benutzer, der der Eigentümer einer Prozedur sein kann, die durch die erste Prozedur aufgerufen wird. Wenn eine Prozedur mit den Privilegien des Aufrufers ausgeführt wird, werden die Privilegien des effektiven Benutzers erzwungen.

Beim Erstellen einer Prozedur oder Funktion legt die SQL SECURITY-Klausel der CREATE PROCEDURE-Anweisung oder der CREATE FUNCTION-Anweisung fest, welche Privilegien gelten, wenn die Prozedur oder Funktion ausgeführt wird, und wer Eigentümer nicht qualifizierter Objekte ist. Die Wahl für diese Klausel ist INVOKER oder DEFINER. Ein Benutzer kann allerdings eine Prozedur oder Funktion erstellen, die einem anderen Benutzer gehört. In diesem Fall sind die Privilegien des Eigentümers gültig und nicht diejenigen des Definierers.

Wenn Sie Prozeduren oder Funktionen erstellen, sollten Sie daher mit Umsicht vorgehen und alle Objektnamen (Tabellen, Prozeduren, etc.) mit ihrem richtigen Eigentümer qualifizieren. Wenn die Objekte in der Prozedur keinen qualifizierten Eigentümer haben, hängt das Eigentum davon ab, ob die Prozedur unter dem Eigentümer oder dem Aufrufer läuft. Nehmen Sie beispielsweise an, Benutzer1 erstellt die folgende Prozedur:

CREATE PROCEDURE user1.myProcedure()
   RESULT( columnA INT )
   SQL SECURITY INVOKER
   BEGIN
     SELECT columnA FROM table1;
   END;

Wenn ein anderer Benutzer, user2, versucht, diese Prozedur auszuführen, und eine Tabelle user2.table1 nicht existiert, wird ein Fehler zurückgegeben. Wenn die Tabelle user2.table1 existiert, wird diese Tabelle verwendet, nicht user1.table1.

Wenn Prozeduren oder Funktionen mit den Privilegien des Aufrufers ausgeführt werden, benötigt der Aufrufer das EXECUTE-Privileg für die Prozedur sowie die erforderlichen Privilegien für die Datenbankobjekte, mit denen die Prozedur, Funktion oder Systemprozedur arbeitet.

Wenn Sie sich nicht sicher sind, ob Prozeduren oder Funktionen als Aufrufer oder Definierer ausgeführt werden, können Sie die SQL SECURITY-Klausel in ihren SQL-Definitionen zu Rate ziehen.

Mithilfe der sp_proc_priv-Systemprozedur können Sie bestimmen, welche Privilegien zum Ausführen einer Prozedur oder Funktion erforderlich sein sollen, die mit Privilegien verbundene Vorgänge in der Datenbank ausführt. Siehe sp_proc_priv-Systemprozedur.

 Siehe auch

Systemprozeduren vor Version 16.0 als Aufrufer oder Definierer ausführen