Freigeben über


EXECUTE AS im Vergleich zu SETUSER

In SQL Server kann der Kontext, in dem eine Zeichenfolge, ein Befehl oder ein Modul ausgeführt wird, explizit mithilfe der EXECUTE AS-Anweisung festgelegt werden. EXECUTE AS ersetzt die SETUSER-Anweisung. Weitere Informationen zum Wechseln des Kontexts finden Sie unter Grundlegendes zum Wechseln des Kontexts.

Vergleich der Funktionen zum Wechseln des Kontexts

Im Vergleich mit der SETUSER-Anweisung besitzt EXECUTE AS die folgenden Vorteile:

  • Andere Server- oder Datenbankprinzipale als sa oder dbo können EXECUTE AS aufrufen.

    Der Benutzer, der die EXECUTE AS-Anweisung aufruft, muss IMPERSONATE-Berechtigungen auf dem Zielprinzipal besitzen.

    SETUSER ist auf Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner beschränkt.

  • Der Bereich des Identitätswechsels wird in der Anweisung explizit definiert.

    Der angegebene Prinzipal wird als LOGIN, ein Identitätswechsel auf Serverebene, oder als USER, ein Identitätswechsel auf Datenbankebene, angegeben.

    Der Bereich des Identitätswechsels in der SETUSER-Anweisung ist implizit. Wenn die Anweisung von einem Mitglied der sysadmin-Rolle aufgerufen wird, wird Identitätswechsel auf Serverebene verwendet. Wenn die Anweisung von einem Konto der dbo-Rolle aufgerufen wird, wird Identitätswechsel auf Datenbankebene verwendet.

  • Der Identitätswechsel bleibt wirksam, bis eines der folgenden Ereignisse eintritt:

    • Die Sitzung wird gelöscht.

    • Der Kontext wird zu einem anderen Anmeldenamen oder Benutzer gewechselt.

    • Der Kontext wird auf den vorherigen Ausführungskontext zurückgesetzt.

    Der Identitätswechsel bleibt mit SETUSER wirksam, bis eines der folgenden Ereignisse eintritt:

    • Eine andere SETUSER-Anweisung wird ausgegeben.

    • Die aktuelle Datenbank wird mit der USE-Anweisung durch ein Konto der dbo-Rolle oder ein Mitglied der festen Serverrolle sysadmin geändert.

  • Sie können einen Ausführungskontextstack erstellen, indem Sie die EXECUTE AS-Anweisung mehrmals auf mehreren Prinzipalen aufrufen. Durch diesen Aufruf wechselt die REVERT-Anweisung den Kontext zu dem Anmeldenamen oder Benutzer auf der nächsthöheren Ebene im Kontextstack. Weitere Informationen finden Sie unter EXECUTE AS (Transact-SQL).

    SETUSER ermöglicht nicht das Erstellen eines Ausführungskontextstacks.

Zurückkehren zu einem vorherigen Kontext

EXECUTE AS

Verwenden Sie die REVERT-Anweisung, um zum vorherigen Kontext zurückzukehren. Der Aufrufer der REVERT-Anweisung muss sich in derselben Datenbank befinden, in der der Identitätswechsel stattfand.

SETUSER

Verwenden Sie die SETUSER-Anweisung, ohne einen Benutzernamen anzugeben, um zum vorherigen Kontext zurückzukehren.