Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Visszakapcsolja a végrehajtási kontextust az utolsó EXECUTE AS utasítás hívójához.
Transact-SQL szintaxis konvenciók
Szemantika
REVERT
[ WITH COOKIE = @varbinary_variable ]
Arguments
SÜTIKTEL = @varbinary_variable
Megadja azt a sütit, amelyet egy megfelelő EXECUTE AS önálló utasításban hoztak létre.
@varbinary_variablevarbináris(100).
Megjegyzések
A REVERT modulban is meghatározható, például tárolt eljárásban vagy felhasználó által definiált függvényben, vagy önálló utasításként. Ha egy modulban belül van megadva, a REVERT csak a modulban definiált EXECUTE AS utasításokra alkalmazható. Például a következő tárolt eljárás egy EXECUTE AS utasítást, amit egy REVERT utasítás követ.
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
Tegyük fel, hogy abban az ülésben, amelyben a tárolt eljárás fut, a munkafolyamat végrehajtási kontextusa kifejezetten változik , login1ahogy azt a következő példa is mutatja.
-- Sets the execution context of the session to 'login1'.
EXECUTE AS LOGIN = 'login1';
GO
EXECUTE dbo.usp_myproc;
A REVERT belső usp_myproc utasítás a modulon belüli végrehajtási kontextushalmazt váltja, de nem befolyásolja a modulon kívüli végrehajtási kontextushalmazt. Vagyis a játékmenet végrehajtási kontextusa továbbra is .login1
Ha önálló utasításként van megadva, a REVERT a EXECUTE AS utasításokra vonatkozik, amelyeket egy kötetben vagy ülésen belül definiálnak. A REVERT nem hat, ha a megfelelő EXECUTE AS utasítás tartalmazza a WITH NO REVERT záradékot. Ebben az esetben a végrehajtási kontextus életben marad, amíg az ülés el nem kerül.
A REVERT COOKIE-val használat
Az EXECUTE AS utasítás, amely a session végrehajtási kontextusának beállításához szolgál, tartalmazhatja az opcionális CLAUSE WITH NO REVERT COOKIE = @varbinary_variable. Amikor ezt az utasítást futtatják, az Database Engine átadja a sütit @varbinary_variable-nek. Az adott utasítás által állított végrehajtási kontextus csak akkor térhet vissza az előző kontextusba, ha a hívó REVERT WITH COOKIE = @varbinary_variable utasítás tartalmazza a helyes @varbinary_variable értéket.
Ez a mechanizmus hasznos olyan környezetben, ahol a kapcsolati poolinget alkalmazzák. A kapcsolati pooling egy adatbázis-kapcsolatcsoport karbantartása, amelyet alkalmazások újrahasznosítanak több végfelhasználó számára. Mivel az @varbinary_variable-nek továbbított értéket csak az EXECUTE AS utasítás hívója ismeri (jelen esetben az alkalmazás), a hívó garantálhatja, hogy az általa létrehozott végrehajtási kontextust az alkalmazást hívó végfelhasználó nem változtathatja meg. Miután a végrehajtási kontextust visszafordították, az alkalmazás átválthat egy másik alapvetélre.
Permissions
Nincs szükség engedélyre.
Példák
A. EXECUTE AS és REVERT használata a kontextus váltásához
Az alábbi példa több alapelv használatával hoz létre egy kontextus végrehajtási stacket. A REVERT utasítást ezután a végrehajtási kontextus visszaállítására használják az előző hívóra. A REVERT utasítást többször is lefuttatják, miközben felfelé haladnak a veremben, amíg a végrehajtási kontextus az eredeti hívóra nem állítódik.
USE AdventureWorks2022;
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
B. A WITH COOKIE záradék használata
A következő példa egy adott felhasználónak állítja be a munkamenet végrehajtási kontextusát, és megadja a WITH NO REVERT COOKIE = @varbinary_variable záradékot. Az REVERT állításnak meg kell határoznia az adott változónak átadott értéket @cookieEXECUTE AS , hogy sikeresen visszaállítsa a kontextust a hívóhoz. A példához login1 a bejelentkezésnek és user1 az A példában létrehozott felhasználónak meg kell léteznie.
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
Lásd még:
VÉGREHAJTÁS (Transact-SQL)
EXECUTE AS klauzula (Transact-SQL)
EXECUTE (Transact-SQL)
SUSER_NAME (Transact-SQL)
USER_NAME (Transact-SQL)
HITELÉVÉ NYITÁS (Transact-SQL)
CREATE USER (Transact-SQL)