Udostępnij za pośrednictwem


PRZYWRÓĆ (Transact-SQL)

Przełącza kontekst wykonanie powrót do rozmówcy ostatniego jako wykonywanie instrukcja.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

REVERT
    [ WITH COOKIE = @varbinary_variable ]

Argumenty

  • PRZY UŻYCIU PLIKU COOKIE = @varbinary_variable
    Określa plik cookie, który został utworzony w odpowiadających Wykonywanie jako autonomicznych instrukcja.@varbinary_variable is varbinary(100).

Uwagi

Operacja PRZYWRACANIA można określić w module, takie jak procedura składowana lub funkcjazdefiniowanej przez użytkownika lub jako autonomiczne instrukcja.Po określeniu wewnątrz modułu PRZYWRÓĆ stosuje się jedynie do instrukcji EXECUTE jak zdefiniowane w module.Na przykład, następujące zagadnienia procedura składowana 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 uruchomienia procedura składowana , kontekst wykonywania sesja zostanie jednoznacznie zmieniony na login1, jak pokazano w następującym przykładzie.

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

REVERTinstrukcja , który zdefiniowano wewnątrz usp_myproc przełącza wykonanie w kontekście zestaw wewnątrz modułu, ale nie wpływa na wykonanie w kontekście zestaw poza module.Oznacza to, że pozostaje zestaw kontekstu wykonania dla sesja login1.

Określony jako samodzielna instrukcja, PRZYWRÓĆ dotyczą instrukcji EXECUTE jako zdefiniowanych w partia lub sesja.Operacja PRZYWRACANIA nie ma wpływu Jeśli odpowiednia jako wykonywanie instrukcja zawiera z nie PRZYWRÓCIĆ klauzula.W tym przypadekkontekst wykonania pozostaje, dopóki sesja zostaje odrzucone.

WYKONYWANIE instrukcja , która jest używana do zestaw kontekst wykonywania sesja można zawierać co opcjonalnej klauzula z nr PRZYWRÓCIĆ COOKIE = @varbinary_variable.Po uruchomieniu tej instrukcja Aparat baz danych przekazuje plik cookie @varbinary_variable.Wykonanie w kontekście zestaw przez instrukcja można tylko można przywrócić do poprzedniego kontekstu Jeśli wywołujący PRZYWRÓCENIE Z pliku COOKIE = @varbinary_variable instrukcja zawiera poprawne @varbinary_variable wartości.

Mechanizm ten jest przydatna w środowisku, w które połączenie jest używane buforowanie.Tworzenie puli połączeń jest utrzymanie grupy połączeń bazy danych do ponownego użycia przez aplikacje przez wielu użytkowników końcowych.Ponieważ wartości przekazywane do @varbinary_variable jest znany tylko wywołującego EXECUTE jak instrukcja (w tym przypadekaplikacji), obiekt wywołujący może zagwarantować, że kontekst wykonywania ustanawiają one nie można zmienić przez użytkownika końcowego, który wywołuje aplikacji.Po kontekst wykonania jest anulowane, aplikację można przełączyć kontekst do innego podmiotu.

Uprawnienia

Uprawnienia nie są wymagane.

Przykłady

A.JAK wykonać przy użyciu i PRZYWRACANIA, należy przełączyć kontekst

Poniższy przykład tworzy stos wykonanie kontekstu przy użyciu wielu podmiotów.PRZYWRÓĆ instrukcja jest następnie używana do resetowania kontekst wykonywania poprzednich wywołującemu.PRZYWRÓĆ instrukcja jest wykonywane wielokrotnie przenoszenie stosu, dopóki nie kontekst wykonania jest zestaw na oryginalny obiekt wywołujący.

USE AdventureWorks2008R2;
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 plik z nr PRZYWRÓCIĆ COOKIE = @varbinary_variable klauzula.REVERTinstrukcja należy określić wartość przekazywana do @cookie w zmiennej EXECUTE ASinstrukcja pomyślnie przywrócić kontekst do rozmówcy. Aby uruchomić ten przykład, login1 logowania i user1 użytkownika utworzone w przykładzie a 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