DÖNMEK (Transact-SQL)
Yürütme içeriği geri deyimson execute as arayan geçer.
Sözdizimi
REVERT
[ WITH COOKIE = @varbinary_variable ]
Bağımsız değişkenler
- TANIMLAMA BİLGİSİ İLE = @varbinary_variable
Karşılık gelen içinde oluşturulduğu tanımlama bilgisini belirtir execute as tek başına deyim.@varbinary_variable is varbinary(100).
Açıklamalar
Geri DÖNDÜRME gibi bir saklı yordam veya kullanıcı tanımlı işlevveya tek başına bir deyimolarak bir modül içinde belirtilebilir.Bir modül içinde belirtildiğinde, geri DÖNDÜRME modülünde tanımlanan execute as ifadeleri geçerlidir.Örneğin, aşağıdaki saklı yordam konuları bir EXECUTE ASarkasındandeyim bir REVERTdeyim.
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
saklı yordam çalıştırıldığında oturum oturum yürütme içeriği açıkça değiştirilir olduğunu varsaymak login1gibi gösterilen aşağıdaki örnek.
-- Sets the execution context of the session to 'login1'.
EXECUTE AS LOGIN = 'login1';
GO
EXECUTE dbo.usp_myproc;
REVERTdeyim içinde tanımlanan usp_myproc yürütme içeriği küme modülü içinde geçer, ancak etkilemez yürütme içeriği küme dışında modülü.küme oturum için yürütme içeriği yani kalır login1.
Tek başına deyimolarak belirtildiğinde, Geri Al toplu iş ya da oturumiçinde tanımlanan execute as ifadeleri geçerlidir.İlgili execute as deyim ile Hayır DÖNMEK yan tümceiçeriyorsa, geri bir etkisi olmaz.Bu durumda yürütme içeriği oturum kesilmeden kadar etkin kalır.
Geri DÖNDÜRME ile tanımlama bilgisi kullanma
execute küme için kullanılan deyim yürütme içeriği oturum isteğe bağlı yan tümce ile Hayır DÖNMEK ÇEREZ ekleyebilirsiniz = @varbinary_variable.Bu deyim çalıştırdığınızda, Veritabanı Altyapısı @ tanımlama geçirmedenvarbinary_variable.Arama ile tanımlama bilgisi geri DÖNERSENİZ, yürütme içeriği küme o deyim tarafından yalnızca önceki içeriğe döndürülmesi = @varbinary_variable deyim içerir doğru @varbinary_variable değer.
Bu mekanizma ortamında hangi bağlantı biriktirmesinin kullanılması yararlıdır.Bağlantı havuzu bakım veritabanı bağlantıları uygulamalar tarafından tekrar kullanılmak üzere bir grup arasında birden çok son kullanıcı sayısıdır.Geçirilen değer çünkü @varbinary_variable yalnızca execute çağıran bilinen deyim (Bu durum, uygulama), arayan bunlar kurmak yürütme içeriği çağıran uygulama. son kullanıcı tarafından değiştirilemez garanti edilmektedirYürütme içeriği dönüştürüldükten sonra uygulamanın başka bir asıl içerik geçiş yapabilirsiniz.
İzinler
Hiçbir izin gereklidir.
Örnekler
A.execute as kullanarak ve geri DÖNDÜRME içeriğinde geçiş yapma
Aşağıdaki örnek, birden çok ilkeleri kullanarak içerik yürütme yığını oluşturur.Geri DÖNDÜRME deyim sonra için önceki çağrıyı yapanın yürütme içeriği sıfırlamak için kullanılır.Yürütme içeriği küme özgün çağırana kadar geri DÖNDÜRME deyim birden çok kez hareketli yığın yukarı yürütülür.
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
B.Tanımlama bilgisi ile yan tümcekullanarak
Aşağıdaki örnek belirtilen bir kullanıcının oturum yürütme içeriği belirler ve bu ile Hayır DÖNMEK tanımlama = @varbinary_variable yan tümce.REVERTdeyim geçirilen değeri belirtmeniz gerekir @cookie değişken EXECUTE ASdeyim başarıyla geri dönmek bağlamına geri arayan. Bu örneği çalıştırmak için login1 login ve user1 a bulunmalıdır örnekte oluşturulmuş kullanıcı.
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