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.

Tipp

Wenn Sie eine gespeicherte Prozedur mit Eigentümerrechten benötigen, um Aktionen auf einer Tabelle, einer Ansicht oder einer Funktion auszuführen, für die der Aufrufer die Zugriffsberechtigung hat, können Sie den Aufrufer eine Referenz auf diese Tabelle, Ansicht oder Funktion übergeben lassen.

Weitere Informationen dazu finden Sie unter Übergegen von Referenzen auf Tabellen, Ansichten, Funktionen und Abfragen an gespeicherte Prozeduren.

Zugriff auf und Einstellung des 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 für Prozeduren mit Aufruferrechten

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;
$$
;
Copy

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

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

Dies entspricht der Ausführung der folgenden Anweisungssequenz:

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

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);
Copy

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
  EXECUTE AS CALLER
  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;
Copy

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.

    Tipp

    Wenn Sie eine gespeicherte Prozedur mit Eigentümerrechten benötigen, um Aktionen auf einer Tabelle, einer Ansicht oder einer Funktion auszuführen, für die der Aufrufer die Zugriffsberechtigung hat, können Sie den Aufrufer eine Referenz auf diese Tabelle, Ansicht oder Funktion übergeben lassen.

    Weitere Informationen dazu finden Sie unter Übergegen von Referenzen auf Tabellen, Ansichten, Funktionen und Abfragen an gespeicherte Prozeduren.

  • 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:

  • 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 für Prozeduren mit Eigentümerrechten

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);
Copy

Erläuterungen zu den Auswirkungen der Sitzungsparameter eines Anrufers auf eine Prozedur mit Eigentümerrechten

Bemerkung

Dieser Abschnitt gilt nicht für den Befehl SHOW PARAMETERS. Der Befehl SHOW PARAMETERS ist in gespeicherten Prozeduren mit Eigentümerrechten nicht erlaubt.

Der Wert eines Sitzungsparameters kann das Verhalten von Befehlen und Funktionen beeinflussen. So verwenden beispielsweise Befehle, die Datumswerte ausgeben, das vom Sitzungsparameter DATE_OUTPUT_FORMAT festgelegte Format.

In der Sitzung eines Aufrufers kann der Aufrufer einen Sitzungsparameter setzen oder überschreiben. In einer gespeicherten Prozedur mit Aufruferrechten können Sitzungsparameter die Ausführung von Abfragen und Ausdrücken beeinflussen, die innerhalb der Prozedur ausgeführt werden. So wirkt sich beispielsweise der Parameter TIMESTAMP_OUTPUT_FORMAT auf das Ausgabeformat einer untergeordneten Abfrage wie select current_timestamp::string aus.

Allerdings werden bei einer gespeicherten Prozedur mit Eigentümerrechten die aus der Sitzung des Aufrufers stammenden Werte nur für die folgenden Parameter verwendet:

  • 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

Bemerkung

Diese Liste kann sich im Laufe der Zeit ändern.

Bei anderen Parametern (oben nicht aufgeführt), gilt Folgendes:

  • Es wird der Kontoparameterwert des Eigentümers verwendet.

  • Wenn der Parameter auf Kontoebene für das Konto des Eigentümers nicht festgelegt ist, wird der Standardwert des Kontoparameters verwendet.

Diese Einschränkung dient dazu, potenzielle Probleme zu vermeiden, die auftreten könnten, wenn die gespeicherte Prozedur mit Eigentümerrechte die Sitzungsparameter des Aufrufers verwendet. Beispiel:

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

  • Wenn eine gespeicherte Prozedur jeden Sitzungsparameter verwenden dürfte, könnte der Eigentümer einer gespeicherten Prozedur den Wert jedes vom Aufrufer festgelegten Sitzungsparameters erkennen.

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:

  • Die integrierten Funktionen, die innerhalb einer gespeicherten Prozedur aufgerufen werden können.

  • 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.

Einschränkungen für integrierte Funktionen

Wenn eine gespeicherte Prozedur als gespeicherte Prozedur mit Eigentümerrechten erstellt wird, können Aufrufer, die keine Eigentümer sind, die folgenden integrierten Funktionen nicht aufrufen:

  • GET_DDL()

    Dies verhindert, dass andere Benutzer als der Eigentümer der gespeicherten Prozedur den Quellcode der gespeicherten Prozedur einsehen können.

  • SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE()

  • SYSTEM$DISABLE_BEHAVIOR_CHANGE_BUNDLE()

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.

    Tipp

    Wenn Sie eine gespeicherte Prozedur mit Eigentümerrechten benötigen, um Aktionen auf einer Tabelle, einer Ansicht oder einer Funktion auszuführen, für die der Aufrufer die Zugriffsberechtigung hat, können Sie den Aufrufer eine Referenz auf diese Tabelle, Ansicht oder Funktion übergeben lassen.

    Weitere Informationen dazu finden Sie unter Übergegen von Referenzen auf Tabellen, Ansichten, Funktionen und Abfragen an gespeicherte Prozeduren.

  • 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.