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ó állításban hoztak létre.
@varbinary_variablevarbináris(100).
Megjegyzések
REVERT Modulon belül meghatározható, például tárolt eljárás vagy felhasználó által definiált függvény, vagy önálló utasításként. Ha egy modulban belül megadják, REVERT csak a EXECUTE AS modulban definiált állí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ó állításként van megadva, REVERT az egy EXECUTE AS tételben vagy ülésen belül definiált utasításokra vonatkozik. REVERT nem hat, ha a megfelelő EXECUTE AS állítás tartalmazza a WITH NO REVERT klauzulatot. Ebben az esetben a végrehajtási kontextus életben marad, amíg az ülés el nem kerül.
COOKIE-val való használat REVERT
Az EXECUTE AS a mondat, amelyet egy session végrehajtási kontextusának beállításához használnak, tartalmazhatja az opcionális záradékot 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ér vissza az előző kontextusba, ha a WITH COOKIE = @varbinary_variable utasítás hívása REVERT 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 a @varbinary_variable-nek átadott értéket csak az utasítás hívója EXECUTE AS (jelen esetben az alkalmazás) ismeri, 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. Használata EXECUTE AS és REVERT 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ással visszaállíthatja a végrehajtási környezetet az előző hívóra. A REVERT utasítás többször lesz végrehajtva, amíg a végrehajtási környezet nem lesz az eredeti hívóra állítva.
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 session 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:
EXECUTE AS (Transact-SQL)
EXECUTE AS Záradék (Transact-SQL)
VÉGREHAJTSA (Transact-SQL)
SUSER_NAME (Transact-SQL)
USER_NAME (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)