Aracılığıyla paylaş


(Transact-SQL) REVERT

yürütmek içeriği, son yürütmek AS deyim çağırana geri geçiş yapar.

Topic link iconTransact-SQL sözdizimi kuralları

REVERT
    [ WITH COOKIE = @varbinary_variable ]

Bağımsız değişkenler

  • varbinary_variable Tanımlama BILGISI =
    Specifies the cookie that was created in a corresponding EXECUTE AS stand-alone statement.@varbinary\_variable is varbinary(100).

Remarks

Geri DÖNDÜRME bir modülündeki gibi bir saklı yordam veya kullanıcı tanımlı fonksiyon veya tek başına bir deyim olarak belirtilebilir.Bir modül içinde belirtilen, geri DÖNDÜRME yalnızca modülünde tanımlanan yürütmek AS ifadeleri geçerlidir.Örneğin, bu aşağıdaki yordamı sorunları depolanan bir EXECUTE AS ardından bir deyim bir REVERT ifade.

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

' De, kabul oturum saklı yordam, yürütme bağlamında çalıştığı oturum açıkça değiştirildi login1, aşağıdaki örnekte gösterildiği gibi.

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

The REVERT deyim that is defined inside usp_myproc switches the execution context küme inside the module, but does not affect the execution context küme outside the module. Diğer bir deyişle oturumun yürütme içeriği kalır küme için login1.

Bir tek başına deyim belirtildiğinde, geri DÖNDÜRME toplu iş iş ya da oturum içinde tanımlanan yürütmek AS ifadeleri geçerlidir.Geri DÖNDÜRME, etkisizdir ilgili yürütmek AS deyim WITH NO REVERT yan tümce içeriyor.Bu durum, yürütme içeriği oturum kesildiğinde kadar etkin kalır.

Geri DÖNDÜRME ILE tanımlama BILGISI kullanma

yürütmek AS deyim için kullanılan olan küme oturumnun yürütmek içeriği, isteğe bağlı WITH NO REVERT TANıMLAMA yan tümce içerebilir = @varbinary\_variable. Bu deyim çalıştırdığınızda, Database Engine tanımlama bilgisi için @ geçirir.varbinary_variable. Yürütme içeriği arama, tanımlama BILGISI REVERT, deyim yalnızca önceki içeriğe döndürülmesi, küme ile = @varbinary\_variable deyim doğru içerir. @varbinary\_variable değer.

Bu mekanizma, hangi bağlantı havuzu oluşturma kullanılan ortamlarda kullanışlıdır.Bağlantı havuzu bakımıyla ilgili bir grubu yeniden kullanmak üzere uygulamalar tarafından veritabanı bağlantıları birden çok son kullanıcı var.Geçilen değer için @varbinary\_variable yürütmek çağırana yalnızca bilinen (Bu durumda, uygulama) deyim, arayanın bunlar kurmak yürütmek içeriği uygulama çağıran son kullanıcı tarafından değiştirilemez garanti edilmektedir. Uygulama yürütme içeriği döndürüldü sonra içeriği için başka bir patron geçiş yapabilirsiniz.

İzinler

Hiçbir izin gereklidir.

Örnekler

C.yürütmek AS kullanarak ve geri DÖNDÜRME içeriğinde geçiş yapma

Aşağıdaki örnek, bir içerik yürütmeye yığını birden çok sorumluları'nı kullanarak oluşturur.GERI deyim sonra yürütme içeriği önceki çağırana sıfırlamakta kullanılır.Yürütme içeriği kadar geri DÖNDÜRME deyimini yığın yukarı taşıma birden çok kez yürütüldükten küme özgün çağırana.

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

b.Tanımlama BILGISI, WITH yan tümcesinin kullanılması

Aşağıdaki örnek, belirtilen bir kullanıcının oturumunun yürütme içeriği ayarlar ve WITH NO REVERT TANıMLAMA belirtir = @varbinary\_variable yan tümce. The REVERT deyim must specify the value passed to the @cookie variable in the EXECUTE AS deyim to successfully revert the context back to the caller. Bu örnekte, çalıştırılacak login1 oturum açma ve user1 Kullanıcı BIR örnekte oluşturulmuş olması gerekir.

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