Udostępnij za pośrednictwem


REVERT (języka Transact-SQL)

Przełącza kontekst wykonać do rozmówcy ostatniej instrukcja wykonać AS.

Topic link iconKonwencje składni języka Transact-SQL

REVERT
    [ WITH COOKIE = @varbinary_variable ]

Argumenty

  • Przy użyciu pliku COOKIE = @ varbinary_variable
    Specifies the cookie that was created in a corresponding EXECUTE AS stand-alone statement.@varbinary\_variable is varbinary(100).

Remarks

Operacja PRZYWRACANIA może być określony w module, takie jak procedura przechowywana lub funkcja zdefiniowanej przez użytkownika lub jako autonomiczną instrukcja.Po określeniu wewnątrz modułu operacja PRZYWRACANIA ma zastosowanie tylko do instrukcji wykonać AS zdefiniowanej w module.Na przykład, następujące przechowywane procedury problemów EXECUTE AS Instrukcja następuje REVERT Instrukcja.

CREATE PROCEDURE dbo.usp_myproc 
  WITH EXECUTE AS CALLER
AS 
    SELECT SUSER_NAME(), USER_NAME();
    EXECUTE AS USER = 'guest';
    SELECT SUSER_NAME(), USER_NAME();
    REVERT;
    SELECT SUSER_NAME(), USER_NAME();
GO

Załóżmy, że w sesja, w którym uruchamiania procedura przechowywana, kontekst wykonywania sesja zostanie jednoznacznie zmieniony na login1, jak pokazano w poniższym przykładzie.

  -- Sets the execution context of the session to 'login1'.
EXECUTE AS LOGIN = 'login1';
GO
EXECUTE dbo.usp_myproc; 

The REVERT instrukcja that is defined inside usp_myproc switches the execution context zestaw inside the module, but does not affect the execution context zestaw outside the module. To znaczy pozostaje kontekstu wykonania dla sesja zestaw do login1.

Po określeniu co instrukcja autonomicznej PRZYWRACANIA odnosi się do instrukcji wykonać AS zdefiniowany w ramach sesja lub partia.Operacja PRZYWRACANIA nie ma znaczenia, jeśli odpowiednia instrukcja wykonać AS zawiera klauzulę WITH NO REVERT.W takim przypadek kontekstu wykonania obowiązuje aż do sesja zostało zerwane.

wykonać AS instrukcja, która jest używana do zestaw kontekst wykonywania sesja może zawierać opcjonalnej klauzula WITH NO REVERT COOKIE = @varbinary\_variable. Po uruchomieniu tej instrukcja Database Engine przekazuje plik cookie @varbinary\_variable. Kontekst wykonywania zestaw przez tę instrukcję można tylko można przywrócić do poprzedniego kontekstu Jeśli wywołujący REVERT przy użyciu pliku COOKIE = @varbinary\_variable Instrukcja zawiera odpowiedniego @varbinary\_variable wartość.

Mechanizm ten jest przydatny w środowisku, w które połączenie jest używane buforowanie.Buforowanie połączeń to zachowania grupy połączeń z bazą danych do ponownego użycia przez aplikacje przez wielu użytkowników końcowych.Ponieważ wartości są przekazywane do @varbinary\_variable znany jest tylko do rozmówcy wykonać AS instrukcja (w tym przypadek aplikacja), obiekt wywołujący może zagwarantować, że kontekst wykonywania ustanawiają one nie mogą być zmieniane przez użytkownika końcowego, który wywołuje aplikacji. Po kontekst wykonania jest anulowane, aplikacja może przełączyć kontekst do innego podmiotu.

Uprawnienia

Uprawnienia nie są wymagane.

Przykłady

A.Za pomocą AS wykonać i operacji PRZYWRACANIA, należy przełączyć kontekst

Poniższy przykład tworzy stosu kontekstu wykonania za pomocą wielu wystawców.instrukcja operacji PRZYWRACANIA jest następnie używana do zresetowania kontekstu wykonania do poprzedniego obiektu wywołującego.instrukcja operacji PRZYWRACANIA jest wykonywana wielokrotnie przenoszenie stosu, dopóki kontekst wykonania jest zestaw do oryginalnego obiektu wywołującego.

USE AdventureWorks;
GO
-- Create two temporary principals.
CREATE LOGIN login1 WITH PASSWORD = 'J345#$)thb';
CREATE LOGIN login2 WITH PASSWORD = 'Uor80$23b';
GO
CREATE USER user1 FOR LOGIN login1;
CREATE USER user2 FOR LOGIN login2;
GO
-- Give IMPERSONATE permissions on user2 to user1
-- so that user1 can successfully set the execution context to user2.
GRANT IMPERSONATE ON USER:: user2 TO user1;
GO
-- Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
-- Set the execution context to login1. 
EXECUTE AS LOGIN = 'login1';
-- Verify that the execution context is now login1.
SELECT SUSER_NAME(), USER_NAME();
-- Login1 sets the execution context to login2.
EXECUTE AS USER = 'user2';
-- Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
-- The execution context stack now has three principals: the originating caller, login1, and login2.
-- The following REVERT statements will reset the execution context to the previous context.
REVERT;
-- Display the current execution context.
SELECT SUSER_NAME(), USER_NAME();
REVERT;
-- Display the current execution context.
SELECT SUSER_NAME(), USER_NAME();

-- Remove the temporary principals.
DROP LOGIN login1;
DROP LOGIN login2;
DROP USER user1;
DROP USER user2;
GO

Poniższy przykład ustawia kontekst wykonywania sesja do określonego użytkownika i określa WITH NO REVERT COOKIE = @varbinary\_variablKlauzula e. The REVERT instrukcja must specify the value passed to the @cookie variable in the EXECUTE AS instrukcja to successfully revert the context back to the caller. Aby uruchomić ten przykład login1 Identyfikator logowania i user1 utworzone w przykładzie A użytkownik musi istnieć.

DECLARE @cookie varbinary(100);
EXECUTE AS USER = 'user1' WITH COOKIE INTO @cookie;
-- Store the cookie somewhere safe in your application.
-- Verify the context switch.
SELECT SUSER_NAME(), USER_NAME();
--Display the cookie value.
SELECT @cookie;
GO
-- Use the cookie in the REVERT statement.
DECLARE @cookie varbinary(100);
-- Set the cookie value to the one from the SELECT @cookie statement.
SET @cookie = <value from the SELECT @cookie statement>;
REVERT WITH COOKIE = @cookie;
-- Verify the context switch reverted.
SELECT SUSER_NAME(), USER_NAME();
GO