Erläuterungen zu gespeicherten Prozeduren mit Aufruferrechten und Eigentümerrechten

Eine gespeicherte Prozedur wird entweder mit den Rechten des Aufrufers oder mit den Rechten des Eigentümers ausgeführt. Sie kann nicht mit beiden gleichzeitig ausgeführt werden. Unter diesem Thema werden die Unterschiede zwischen einer gespeicherten Prozedur mit Aufruferrechten und einer gespeicherten Prozedur mit Eigentümerrechten beschrieben.

Unter diesem Thema:

Einführung

Eine gespeicherte Prozedur mit Aufruferrechten mit den Berechtigungen des Aufrufers ausgeführt. Der Hauptvorteil einer gespeicherten Prozedur mit Aufruferrrechten besteht darin, dass diese auf Informationen über diesen Aufrufer oder über die aktuelle Sitzung des Aufrufers zugreifen kann. Beispielsweise kann eine gespeicherte Prozedur mit Aufruferrechen die Sitzungsvariablen des Aufrufers lesen und in einer Abfrage verwenden.

Eine gespeicherte Prozedur mit Eigentümerrechen wird hauptsächlich mit den Berechtigungen des Eigentümers der gespeicherten Prozedur ausgeführt. Der Hauptvorteil einer gespeicherten Prozedur mit Eigentümerrechen besteht darin, dass der Eigentümer bestimmte Verwaltungsaufgaben, z. B. das Bereinigen alter Daten, an eine andere Rolle delegieren kann, ohne dieser Rolle allgemeinere Berechtigungen zu erteilen, z. B. Berechtigungen zum Löschen aller Daten aus einer bestimmten Tabelle.

Zum Zeitpunkt der Erstellung der gespeicherten Prozedur gibt der Ersteller an, ob die Prozedur mit Eigentümerrechen oder mit Aufruferrechten ausgeführt wird. Die Standardeinstellung ist eine Prozedur mit Eigentümerrechten.

Der Eigentümer der Prozedur kann mithilfe des Befehls ALTER PROCEDURE die gespeicherte Prozedur mit Eigentümerrechten in eine gespeicherte Prozedur mit Aufruferrechten (oder umgekehrt) ändern.

Berechtigungen für Datenbankobjekte

Eine gespeicherte Prozedur mit Aufruferrechten wird mit den Datenbankberechtigungen der Rolle ausgeführt, die die gespeicherte Prozedur aufgerufen hat. Anweisungen, die der Aufrufer außerhalb der gespeicherten Prozedur nicht ausführen konnte, können auch nicht innerhalb der gespeicherten Prozedur ausgeführt werden. Wenn beispielsweise die Rolle „Pflegekraft“ keine Berechtigungen zum Löschen von Zeilen aus der Tabelle medical_records hat, und dann aber ein Benutzer mit der Rolle „Pflegekraft“ eine gespeicherte Prozedur mit Aufruferrechten aufruft, in der Zeilen aus dieser Tabelle gelöscht werden sollen, dann schlägt diese gespeicherte Prozedur fehl.

Eine Prozedur mit Eigentümerrechten wird mit den Berechtigungen des Eigentümers der Prozedur ausgeführt. Wenn der Eigentümer über die Berechtigungen zum Ausführen einer Aufgabe verfügt, kann die gespeicherte Prozedur diese Aufgabe auch dann ausführen, wenn sie von einer Rolle aufgerufen wird, die nicht über die Berechtigungen zum direkten Ausführen dieser Aufgabe verfügt. Beispiel: Die Rolle mit dem Namen „Arzt“ verfügt über die Datenbankberechtigungen zum Löschen von Zeilen aus der Tabelle medical_records. Wenn diese Rolle „Arzt“ eine gespeicherte Prozedur erstellt, mit der Zeilen aus dieser Tabelle gelöscht werden, die älter als 7 Jahre sind, und dann die Rolle „Arzt“ der Rolle „Pflegekraft“ die entsprechenden Berechtigungen für die gespeicherte Prozedur gewährt, dann kann die Rolle „Pflegekraft“ die gespeicherte Prozedur ausführen (und alte Zeilen über diese gespeicherte Prozedur aus der Tabelle löschen), selbst wenn die Rolle „Pflegekraft“ keine Löschberechtigung für diese Tabelle hat.

Sitzungsstatus

Wie auch bei anderen SQL-Anweisungen wird eine CALL-Anweisung innerhalb einer Sitzung ausgeführt und erbt den Kontext dieser Sitzung, z. B. Variablen auf Sitzungsebene, aktuelle Datenbank usw. Der genaue Kontext, den die Prozedur erbt, hängt davon ab, ob es sich bei der gespeicherten Prozedur um eine gespeicherte Prozedur mit Aufruferrechten oder eine gespeicherte Prozedur mit Eigentümerrechten handelt.

Wenn eine gespeicherte Prozedur mit Aufruferrechten Änderungen an der Sitzung vornimmt, können diese Änderungen nach dem Ende von CALL bestehen bleiben. Gespeicherte Prozeduren mit Eigentümerrechten dürfen den Sitzungsstatus nicht ändern.

Gespeicherte Prozeduren mit Aufruferrechten

Gespeicherte Prozeduren mit Aufruferrechten halten sich in einer Sitzung an die folgenden Regeln:

  • Sie werden mit den Berechtigungen des Aufrufers ausgeführt, nicht mit den Berechtigungen des Eigentümers.

  • Sie übernehmen das aktuelle Warehouse des Aufrufers.

  • Sie verwenden die Datenbank und das Schema, die der Aufrufer gerade verwendet.

  • Kann Sitzungsvariablen des Aufrufers anzeigen, festlegen und aufheben.

  • Kann Sitzungsparameter des Aufrufers anzeigen, festlegen und aufheben.

Der Abschnitt unten enthält weitere Details dazu, wie gespeicherte Prozeduren mit Aufruferrechten Variablen des Aufrufers auf Sitzungsebene lesen und schreiben können.

Sitzungsvariablen

Angenommen, die gespeicherte Prozedur mit dem Namen MyProcedure führt SQL-Anweisungen aus, mit denen Variablen auf Sitzungsebene gelesen und geschrieben werden. Im folgenden Beispiel sind die Details zu den Lese- und Schreibbefehlen nicht wichtig, daher werden die Anweisungen als Pseudocode dargestellt:

  • READ SESSION_VAR1

  • SET SESSION_VAR2

Die gespeicherte Prozedur ähnelt dem folgenden Pseudocode:

CREATE PROCEDURE MyProcedure()
...
$$
   READ SESSION_VAR1;
   SET SESSION_VAR2;
$$
;

Führen Sie anschließend in derselben Sitzung folgende Anweisungssequenz aus:

SET SESSION_VAR1 = 'some interesting value';
CALL MyProcedure();
SELECT *
    FROM table
    WHERE column1 = $SESSION_VAR2;

Dies entspricht der Ausführung der folgenden Sequenz:

SET SESSION_VAR1 = 'some interesting value';
READ SESSION_VAR1;
SET SESSION_VAR2;
SELECT *
    FROM table
    WHERE column1 = $SESSION_VAR2;

Mit anderen Worten:

  • Die gespeicherte Prozedur kann die Variable sehen, die von Anweisungen festgelegt wurde, bevor die Prozedur aufgerufen wurde.

  • Die Anweisungen nach der gespeicherten Prozedur können die Variable sehen, die in der Prozedur festgelegt wurde.

Ein vollständiges Beispiel, das nicht auf Pseudocode basiert, finden Sie unter Verwenden von Sitzungsvariablen bei gespeicherten Prozeduren mit Aufrufer- und Eigentümerrechten (unter diesem Thema).

Häufig sollen in gespeicherten Prozeduren Kontextdaten wie die aktuelle Datenbank und die aktuellen Variablen auf Sitzungsebene vererbt werden.

In einigen Fällen soll eine gespeicherte Prozedur aber möglicherweise besser isoliert sein. Wenn Ihre gespeicherte Prozedur beispielsweise eine Variable auf Sitzungsebene festlegt, wollen Sie eventuell nicht, dass die Variable auf Sitzungsebene zukünftige Anweisungen außerhalb der gespeicherten Prozedur beeinflusst.

So isolieren Sie Ihre gespeicherte Prozedur besser vom Rest der Sitzung:

  • Vermeiden Sie eine direkte Verwendung von Variablen auf Sitzungsebene. Übergeben Sie diese stattdessen als explizite Parameter. Das zwingt den Aufrufer dazu, genau zu überlegen, welche Variablen der Sitzungsebene von der gespeicherten Prozedur verwendet werden sollen.

  • Bereinigen Sie alle Variablen der Sitzungsebene, die Sie in der gespeicherten Prozedur festgelegt haben (und verwenden Sie Namen, die wahrscheinlich nirgendwo sonst verwendet werden, sodass Sie nicht versehentlich eine Sitzungsvariable bereinigen, die bereits vor Aufruf der gespeicherten Prozedur vorhanden war).

In der folgenden gespeicherten Prozedur wird der Wert einer Sitzungsvariablen verwendet, indem der Wert als Parameter empfangen wird, und nicht, indem die Sitzungsvariable direkt verwendet wird:

SET Variable_1 = 49;
CREATE PROCEDURE sv_proc2(PARAMETER_1 FLOAT)
    RETURNS VARCHAR
    LANGUAGE JAVASCRIPT
    AS
    $$
        var rs = snowflake.execute( {sqlText: "SELECT 2 * " + PARAMETER_1} );
        rs.next();
        var MyString = rs.getColumnValue(1);
        return MyString;
    $$
    ;
  CALL sv_proc2($Variable_1);

In der folgenden gespeicherten Prozedur wird eine temporäre Sitzungsvariable mit einem ungewöhnlichen Namen erstellt und diese Variable vor Abschluss der gespeicherten Prozedur bereinigt. Wenn eine Anweisung nach dem Prozeduraufruf versucht, die bereinigte Sitzungsvariable zu verwenden, schlägt die Anweisung fehl:

CREATE PROCEDURE sv_proc1()
    RETURNS VARCHAR
    LANGUAGE JAVASCRIPT
    AS
    $$
        var rs = snowflake.execute( {sqlText: "SET SESSION_VAR_ZYXW = 51"} );

        var rs = snowflake.execute( {sqlText: "SELECT 2 * $SESSION_VAR_ZYXW"} );
        rs.next();
        var MyString = rs.getColumnValue(1);

        rs = snowflake.execute( {sqlText: "UNSET SESSION_VAR_ZYXW"} );

        return MyString;
    $$
    ;

CALL sv_proc1();
-- This fails because SESSION_VAR_ZYXW is no longer defined.
SELECT $SESSION_VAR_ZYXW;

Bemerkung

Wenn Sie zum Programmieren die Sprachen C (oder ähnliche Sprachen wie Java) verwenden, beachten Sie, dass Sitzungsvariablen, die Sie in einer gespeicherten Prozedur festlegen, nicht den lokalen Variablen in C entsprechen, die nach Beendigung der Ausführung einer C-Funktion verschwinden. Das Isolieren einer gespeicherten Prozedur gegenüber seiner Umgebung erfordert in SQL mehr Aufwand als in C.

Gespeicherte Prozeduren mit Eigentümerrechten

Gespeicherte Prozeduren mit Eigentümerrechten unterliegen in einer Sitzung den folgenden Regeln:

  • Sie werden mit den Berechtigungen des Eigentümers ausgeführt, nicht mit den Berechtigungen des Aufrufers.

  • Sie übernehmen das aktuelle Warehouse des Aufrufers.

  • Sie verwenden die Datenbank und das Schema, in denen die gespeicherte Prozedur erstellt wurde, nicht die Datenbank und das Schema, die der Aufrufer aktuell verwendet.

  • Auf die meisten Aufrufer-spezifischen Informationen kann nicht zugegriffen werden. Beispiel:

    • Sitzungsvariablen des Aufrufers können nicht angezeigt, festgelegt oder aufgehoben werden.

    • Es können nur bestimmte unterstützte Sitzungsparameter (hier aufgeführt) gelesen, aber keine Sitzungsparameter des Aufrufers festgelegt oder aufgehoben werden.

    • INFORMATION_SCHEMA-Tabellenfunktionen wie AUTOMATIC_CLUSTERING_HISTORY, die Ergebnisse basierend auf dem aktuellen Benutzer zurückgeben, können nicht abgefragt werden.

  • Nicht-Eigentümern werden keine Informationen über die Prozedur aus der Ansicht PROCEDURES angezeigt.

Einschränkungen für Sitzungsvariablen und Sitzungsparameter werden nachstehend ausführlicher beschrieben.

Sitzungsvariablen

Eine gespeicherte Prozedur hat keinen Zugriff auf SQL-Variablen, die außerhalb der gespeicherten Prozedur erstellt wurden. Diese Einschränkung verhindert, dass eine gespeicherte Prozedur, die von einem Benutzer verfasst wurde oder deren Eigentümer ein Benutzer ist, SQL-Variablen liest, die von einem anderen Benutzer (dem Aufrufer der gespeicherten Prozedur) erstellt wurden.

Wenn die gespeicherte Prozedur Werte benötigt, die in SQL-Variablen der aktuellen Sitzung gespeichert sind, sollten die Werte in diesen Variablen als explizite Argumente an die gespeicherte Prozedur übergeben werden. Beispiel:

SET PROVINCE = 'Manitoba';
CALL MyProcedure($PROVINCE);

Sitzungsparameter

In einigen Fällen kann es hilfreich sein, der gespeicherten Prozedur das Lesen der Sitzungsparameter des Aufrufers zu erlauben. So kann die gespeicherte Prozedur bestimmte Informationen nutzen, um das spezifische Verhalten für diesen Aufrufer oder diese Sitzung anzupassen. Die gespeicherte Prozedur könnte beispielsweise das vom Aufrufer bevorzugte DATE_OUTPUT_FORMAT verwenden.

In anderen Fällen ist es jedoch ggf. nicht wünschenswert, die Sitzungsparameter des Aufrufers zu lesen:

  • Wenn der Autor (Eigentümer) einer gespeicherten Prozedur einen bestimmten Sitzungsparameter festgelegt hat, aber dieser Parameter vom Aufrufer der gespeicherten Prozedur nicht festgelegt wird, kann die gespeicherte Prozedur fehlschlagen oder sich anders verhalten, wenn sie von anderen Benutzern als dem Autor aufgerufen wird.

  • Wenn ein Benutzer eine gespeicherte Prozedur schreibt und ein anderer Benutzer die gespeicherte Prozedur aufgerufen hat und die gespeicherte Prozedur alle Sitzungsparameter lesen durfte, dann kann der Autor (Eigentümer) der gespeicherten Prozedur die vom Aufrufer festgelegten Sitzungsparameter möglicherweise lesen, ohne dass der Aufrufer dies mitbekommt.

Um diese potenziellen Probleme zu vermeiden, bietet Snowflake die Möglichkeit, dass eine gespeicherte Prozedur nur eine bestimmte Teilmenge der Sitzungsparameter des Aufrufers verwendet (siehe Liste unten).

Wenn eine Anweisung in einer gespeicherten Prozedur auf einen nicht unterstützten Parameter verweist, nutzt die gespeicherte Prozedur den Wert des Parameters des Eigentümers auf Kontoebene und nicht den Parameter des Aufrufers auf Sitzungsebene.

Wenn der Eigentümer der gespeicherten Prozedur den Kontoparameter nie explizit festgelegt hat, verwendet die gespeicherte Prozedur den Standardwert für den Kontoparameter.

Folgende Parameter werden derzeit unterstützt (die Liste kann sich im Laufe der Zeit ändern):

  • AUTOCOMMIT

  • BINARY_INPUT_FORMAT

  • BINARY_OUTPUT_FORMAT

  • DATE_INPUT_FORMAT

  • DATE_OUTPUT_FORMAT

  • ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION

  • ERROR_ON_NONDETERMINISTIC_MERGE

  • ERROR_ON_NONDETERMINISTIC_UPDATE

  • JDBC_TREAT_DECIMAL_AS_INT

  • JSON_INDENT

  • LOCK_TIMEOUT

  • MAX_CONCURRENCY_LEVEL

  • ODBC_USE_CUSTOM_SQL_DATA_TYPES

  • PERIODIC_DATA_REKEYING

  • QUERY_TAG

  • QUERY_WAREHOUSE_NAME

  • ROWS_PER_RESULTSET

  • STATEMENT_QUEUED_TIMEOUT_IN_SECONDS

  • STATEMENT_TIMEOUT_IN_SECONDS

  • STRICT_JSON_OUTPUT

  • TIMESTAMP_DAY_IS_ALWAYS_24H

  • TIMESTAMP_INPUT_FORMAT

  • TIMESTAMP_LTZ_OUTPUT_FORMAT

  • TIMESTAMP_NTZ_OUTPUT_FORMAT

  • TIMESTAMP_OUTPUT_FORMAT

  • TIMESTAMP_TYPE_MAPPING

  • TIMESTAMP_TZ_OUTPUT_FORMAT

  • TIMEZONE

  • TIME_INPUT_FORMAT

  • TIME_OUTPUT_FORMAT

  • TRANSACTION_ABORT_ON_ERROR

  • TRANSACTION_DEFAULT_ISOLATION_LEVEL

  • TWO_DIGIT_CENTURY_START

  • UNSUPPORTED_DDL_ACTION

  • USE_CACHED_RESULT

  • WEEK_OF_YEAR_POLICY

  • WEEK_START

Weitere Informationen zu Sitzungsparametern finden Sie unter Parameter, ALTER SESSION und SHOW PARAMETERS.

Entfernen einiger Einschränkungen bei gespeicherten Prozeduren mit Eigentümerrechten

Für gespeicherte Prozeduren mit Eigentümerrechten gelten neben den Einschränkungen für Sitzungsvariablen und Sitzungsparameter mehrere zusätzliche Einschränkungen. Diese Einschränkungen beziehen sich auf Folgendes:

  • Möglichkeit, die Funktion GET_DDL aufzurufen, um die DDL der gespeicherten Prozedur zu erhalten.

  • Möglichkeit, ALTER USER-Anweisungen auszuführen.

  • Überwachen gespeicherter Prozeduren zum Zeitpunkt der Ausführung.

  • Befehle SHOW und DESCRIBE.

  • Die Arten von SQL-Anweisungen, die innerhalb einer gespeicherten Prozedur aufgerufen werden können.

In den folgenden Abschnitten werden diese Einschränkungen ausführlicher erläutert:

Bemerkung

Die meisten Einschränkungen einer gespeicherten Prozedur mit Eigentümerrechten gelten für alle Aufrufer, einschließlich des Eigentümers.

GET_DDL und gespeicherte Prozeduren

Wenn eine gespeicherte Prozedur als gespeicherte Prozedur mit Eigentümerrechten erstellt wird, können Aufrufer (andere als der Eigentümer) den Hauptteil der gespeicherten Prozedur nicht durch Aufrufen von GET_DDL( <Prozedurname>, ... ) anzeigen.

Auf diese Weise kann der Autor der gespeicherten Prozedur vertrauliche Informationen im Quellcode der gespeicherten Prozedur schützen.

ALTER USER

Die folgenden Einschränkungen gelten für ALTER USER-Anweisungen in einer gespeicherten Prozedur mit Eigentümerrechten:

  • Gespeicherte Prozeduren mit Eigentümerrechten können keine ALTER USER-Anweisungen ausführen, die implizit den aktuellen Benutzer der Sitzung verwenden. (Gespeicherte Prozeduren mit Eigentümerrechten können allerdings ALTER USER-Anweisungen ausführen, die den Benutzer explizit identifizieren, solange der Benutzer nicht der aktuelle Benutzer ist.)

Überwachen gespeicherter Prozeduren zum Zeitpunkt der Ausführung

Weder Eigentümer noch Aufrufer einer gespeicherten Prozedur mit Eigentümerrechten verfügen notwendigerweise über Berechtigungen zum Überwachen der Ausführung der gespeicherten Prozedur.

Ein Benutzer mit der Berechtigung WAREHOUSE MONITOR kann die Ausführung der einzelnen Warehouse-bezogenen SQL-Anweisungen in dieser gespeicherten Prozedur überwachen. Die meisten Abfragen und DML-Anweisungen beziehen sich auf Warehouse-orientierte Anweisungen. DDL-Anweisungen wie CREATE, ALTER usw. nutzen das Warehouse nicht und können im Rahmen der Überwachung gespeicherter Prozeduren nicht überwacht werden.

Befehle SHOW und DESCRIBE

Eine gespeicherte Prozedur mit Eigentümerrechten verfügt nicht über die erforderlichen Berechtigungen, um Informationen über andere Benutzer als den Aufrufer zu lesen. Beispiel: Wenn Sie SHOW USERS LIKE <aktueller_Benutzer> ausführen, werden Informationen zum aktuellen Benutzer angezeigt, aber der allgemeinere Befehl SHOW USERS funktioniert nur, wenn der aktuelle Benutzer der einzige Benutzer ist.

Die folgenden SHOW-Befehle sind zulässig:

  • SHOW DATABASES

  • SHOW SCHEMAS

  • SHOW WAREHOUSES

Einschränkungen für SQL-Anweisungen

Obwohl gespeicherte Prozeduren mit Aufruferrechten jede SQL-Anweisung ausführen können, für die der Aufrufer über ausreichende Berechtigungen verfügt, um sie außerhalb einer gespeicherten Prozedur auszuführen, können gespeicherte Prozeduren mit Eigentümerrechten nur eine Teilmenge von SQL-Anweisungen aufrufen.

Die folgenden SQL-Anweisungen können aus der gespeicherten Prozedur mit Eigentümerrechten heraus aufgerufen werden:

  • SELECT

  • DML

  • DDL (Einschränkungen für die ALTER USER-Anweisung finden Sie oben.)

  • GRANT/REVOKE

  • Variablenzuordnung

  • DESCRIBE und SHOW (siehe oben dokumentierte Einschränkungen)

Andere SQL-Anweisungen können nicht aus der gespeicherten Prozedur mit Eigentümerrechten heraus aufgerufen werden.

Verschachtelte gespeicherte Prozeduren mit unterschiedlichen Rechten

Wenn eine gespeicherte Prozedur mit Eigentümerrechten von einer gespeicherten Prozedur mit Aufruferrechten aufgerufen wird oder umgekehrt, gelten die folgenden Regeln:

  • Eine gespeicherte Prozedur verhält sich wie eine gespeicherte Prozedur mit Aufruferrechten nur dann, wenn es sich bei der Prozedur und allen in der Aufrufhierarchie darüberliegenden Prozeduren um gespeicherte Prozeduren mit Aufruferrechten handelt.

  • Eine gespeicherte Prozedur mit Eigentümerrechten verhält sich stets wie eine gespeicherte Prozedur mit Eigentümerrechten, unabhängig davon, von wo aus sie aufgerufen wird.

  • Jede gespeicherte Prozedur, die direkt oder indirekt von einer gespeicherten Prozedur mit Eigentümerrechten aufgerufen wird, verhält sich wie eine gespeicherte Prozedur mit Eigentümerrechten.

Auswählen zwischen Eigentümerrechten und Aufruferrechten

Erstellen Sie eine gespeicherte Prozedur als gespeicherte Prozedur mit Eigentümerrechten, wenn alle der folgenden Bedingungen erfüllt sind:

  • Sie möchten eine Aufgabe bzw. Aufgaben an einen oder mehrere andere Benutzer delegieren, die mit den Berechtigungen des Eigentümers und nicht den Berechtigungen des Aufrufers ausgeführt werden sollen. Wenn Sie beispielsweise möchten, dass ein Benutzer ohne DELETE-Berechtigung für eine Tabelle eine gespeicherte Prozedur aufrufen kann, mit der alte, aber nicht aktuelle Daten gelöscht werden, werden Sie wahrscheinlich eine gespeicherte Prozedur mit Eigentümerrechten verwenden. Diese Prozedur wird eine DELETE-Anweisung enthalten, die einen Filter (eine WHERE-Klausel) enthält, um zu steuern, welche Daten über den Filter gelöscht werden können.

  • Die Einschränkungen von gespeicherten Prozeduren mit Eigentümerrechten verhindern nicht, dass die gespeicherte Prozedur ordnungsgemäß funktioniert.

Erstellen Sie eine gespeicherte Prozedur als gespeicherte Prozedur mit Aufruferrechten, wenn Folgendes zutrifft:

  • Die gespeicherte Prozedur kann nur für Objekte verwendet werden, bei denen der Aufrufer der Eigentümer ist oder die erforderlichen Berechtigungen besitzt.

  • Die Einschränkungen von gespeicherten Prozeduren mit Eigentümerrechten würden verhindern, dass die gespeicherte Prozedur ordnungsgemäß funktioniert. Verwenden Sie beispielsweise eine Prozedur mit Aufruferrechten, wenn der Aufrufer in der gespeicherten Prozedur Informationen aus seiner Umgebung verwenden muss (z. B. Sitzungsvariablen oder Kontoparameter).

Wenn eine bestimmte Prozedur entweder mit den Rechten des Aufrufers oder mit den Rechten des Eigentümers ordnungsgemäß funktioniert, kann die folgende Regel Ihnen bei der Auswahl der zu verwendenden Rechte helfen:

  • Wenn es sich bei einer Prozedur um eine Prozedur mit Eigentümerrechten handelt, hat der Aufrufer keine Berechtigung zur Anzeige des Codes in der gespeicherten Prozedur (es sei denn, der Aufrufer ist gleichzeitig Eigentümer). Wenn Sie verhindern möchten, dass Aufrufer den Quellcode der Prozedur anzeigen, erstellen Sie die Prozedur als Prozedur mit Eigentümerrechten. Wenn Sie umgekehrt möchten, dass Aufrufer den Quellcode lesen können, erstellen Sie die Prozedur als Prozedur mit Aufruferrechten.