revert (Transact-sql)

Yürütme içeriği son execute as deyimi çağırana geri döner.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

REVERT
    [ WITH COOKIE = @varbinary_variable ]

Bağımsız değişkenler

  • ÇEREZ İLE = @varbinary\_variable
    İlgili olarak oluşturulan tanımlama bilgisini belirtir execute as tek başına deyimi. @varbinary\_variable is varbinary(100).

Açıklamalar

Geri Al, öyle aynı derecede bir saklı yordam veya kullanıcı tanımlı fonksiyonu veya tek başına bir ifadesi olarak bir modül içinde belirtilebilir. Bir modül içinde belirtildiğinde, Döndür, yalnızca modülünde tanımlanan execute as deyimleri için geçerlidir. Örneğin, aşağıdaki yordam konuları depolanmış bir EXECUTE ASarkasından deyimi bir REVERTdeyimi.

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

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ığı oturumda, oturumun yürütme içeriği açıkça olarak değiştirilir kabul 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; 
  -- Sets the execution context of the session to 'login1'.
EXECUTE AS LOGIN = 'login1';
GO
EXECUTE dbo.usp_myproc; 

REVERTDeyimi içinde tanımlanan usp_ myproc modülü içinde ayarlamak yürütme içeriği geçer, ama modülü set yürütme içeriği etkilemez. Yani, oturumun yürütme içeriği için ayarlanmış kalır login1.

Bir tek başına beyanı olarak belirtildiğinde, geri döndürme bir toplu iş veya oturum içinde tanımlanan execute as deyimleri geçerlidir. İlgili execute as deyiminde dönmek ile hayır yan tümcesi içeriyorsa, döndürme etkisi yoktur. Bu durumda, yürütme içeriği oturumu kesilmeden kadar etkin kalır.

Kullanarak tanımlama bilgisi ile döner

YÜRÜTME gibi bir oturumun yürütme içeriği ayarlamak için kullanılan deyimi isteğe bağlı yan tümcesi ile geri döndürme tanımlama bilgisi içerebilir = @varbinary\_variable. Bu deyimi çalıştırdığınızda Veritabanı Altyapısı@ tanımlama bilgisine geçervarbinary_variable. Eğer arama ÇEREZ ile dönmek deyimi yalnızca önceki içerik döndürülmesi yürütme içeriği ayarlar = @varbinary\_variable deyimi doğru içeren @varbinary\_variable değer.

Bu, hangi bağlantı havuzlaması kullanılan ortamlarda yararlı bir mekanizmadır. Bağlantı havuzu bakım veritabanı bağlantılarını yeniden uygulamalar tarafından kullanılmak üzere bir grup birden fazla son kullanıcılar arasında olduğunu. Çünkü değer geçirilen @varbinary\_variableyalnızca execute çağıran için bilinir (Bu durumda, uygulama) ifadesi onlar kurmak yürütme içeriği çağıran uygulamanın son kullanıcı tarafından değiştirilemez arayan garantisini. Yürütme içeriği sürümüne döndürülür sonra uygulama başka sorumlusuna 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 fazla ilkeleri kullanarak içeriği yürütme yığın oluşturur. Geri döndürme deyimini sonra yürütme içeriği önceki çağrıyı sıfırlamak için kullanılır. Yürütme içeriği özgün çağrıyı ayarlanıncaya kadar geri döndürme deyimini birden çok kez hareket yukarı yığın yürütülür.

USE AdventureWorks2012;
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

USE AdventureWorks2012;
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.ÇEREZ ile yan tümcesi kullanarak

Aşağıdaki örnek, belirtilen kullanıcı için bir oturum yürütme içeriği belirler ve WITH no dönmek ÇEREZ belirtir = @varbinary\_variable fıkra. REVERTDeyimi geçirilen değer belirtmelidir @cookiedeğişken olarak EXECUTE ASsırt-e doğru arayan bağlamı başarıyla dönmek deyimi. Bu örneği çalıştırmak için login1giriş ve user1a gerekir mevcut ö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

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

Ayrıca bkz.

Başvuru

execute (Transact-sql)

execute as yan tümcesi (Transact-sql)

execute (Transact-sql)

SUSER_NAME (Transact-sql)

col_name (Transact-sql)

Giriş (Transact-sql) oluştur

CREATE USER (Transact-SQL)