Aracılığıyla paylaş


Transact-SQL () yürütmek

Yürütme içeriği oturumunun ayarlar.

Bir kullanıcı oturum açtığında ve kullanıcı oturumu kapattığında sona erdirir, varsayılan olarak, bir oturum başlatır.Tüm işlemleri oturum sırasında karşı kullanıcı izni çekler oluşturulur.yürütmek AS zaman deyimini çalıştırın, oturumun yürütmek içeriği için belirtilen oturum açma veya kullanıcı adı geçti.Sonra bağlam değiştirme, izinlere, yürütmek AS arayan kişinin yerine bu hesap için oturum açma ve kullanıcı güvenlik belirteçleri karşı denetlenir deyim.Özet olarak, kullanıcı veya oturum açma hesabının oturum veya modülü yürütme süresi için özellikleri veya bağlam değiştirme açıkça döndürüldü.Yürütme içeriği hakkında daha fazla bilgi için bkz: Yürütme içeriği'ni anlama. Bağlam geçişi hakkında daha fazla bilgi için bkz: Içerik geçişi'nı anlama.

Topic link iconTransact-SQL sözdizimi kuralları

{ EXEC | EXECUTE ] AS <context_specification>
[;]

<context_specification>::=
{ LOGIN | USER } = 'name'
    [ WITH { NO REVERT | COOKIE INTO @varbinary_variable } ] 
| CALLER

Bağımsız değişkenler

  • OTURUM AÇMA
    Yürütme içeriği, özellikleri için bir oturum açma belirtir.Kimliğe bürünme sunucuda kapsam düzey.

  • Kullanıcı
    Içerik özellikleri için geçerli veritabanında bir kullanıcı olduğunu belirtir.Kimliğe bürünme kapsamını, geçerli veritabanına sınırlandırılır.Bir bağlam değiştirme bir veritabanı kullanıcısı için sunucu-devralmaz düzey o kullanıcının izinler.

    Important noteImportant Note:

    Sırada bağlam değiştirme kullanıcı veritabanına etkinse, veritabanının dışında kaynaklara erişmek için herhangi bir girişim deyim başarısız olmasına neden olur.Bu USE içerir. database ifadeleri, dağıtılmış sorgular ve üç veya dört part tanımlayıcıları kullanan başka bir veritabanına başvuran sorgular. Kapsam dışında geçerli veritabanında içerik anahtarının genişletmek için , bkz: yürütmek AS'nı kullanarak veritabanı kimliğe bürünme genişletme.

  • 'name'
    Is a valid user or login name.name must be a member of the sysadmin fixed server role, or exist as a principal in sys.database_principals or sys.server_principals, respectively.

    name yerel bir değişken olarak belirtilebilir.

    name tek bir hesap olmalıdır ve bir grup, rol, sertifika, anahtar veya NT authorıty\localservice, NT authorıty\networkservice veya NT AUTHORITY\LocalSystem gibi yerleşik bir hesap olamaz.

    Daha fazla bilgi için bkz: Bir kullanıcı veya oturum açma adı belirtme bu konunun ilerleyen bölümlerindeki.

  • YOK BİR GERİ DÖNDÜRME
    bağlam değiştirme önceki içeriğe döndürülmesi edemiyor belirtir.

    Önceki içeriğe dönüştürme hakkında daha fazla bilgi için bkz: (Transact-SQL) REVERT.

  • Tanımlama BILGISI INTO **@**varbinary_variable
    Arama tanımlama BILGISI REVERT WITH deyim doğru içeriyorsa, yürütme içeriği yalnızca önceki bağlamına geri döndürülmesi belirtir. **@**varbinary_variable değeri.The Database Engine passes the cookie to **@**varbinary_variable.

    **@**varbinary_variable olan varbinary(100).

  • ARAYANIN
    Bir modül içinde kullanıldığında, Modül içindeki ifadeler modülünün çağıran içeriğinde çalıştırılan belirtir.

    Bir modül dışında kullanıldığında, deyim herhangi bir eylem vardır.

Remarks

Yürütme içeriği değişikliği, aşağıdakilerden biri oluşana kadar etkin kalır:

  • Başka bir yürütmek AS deyim çalıştırılır.

  • Bir geri DÖNDÜRME deyim çalıştırılır.

  • Oturum bıraktı.

Bir yürütmek içerik yığını yürütmek AS çaðýrarak oluşturabileceğiniz birden çok kez birden çok asılları üzerinde deyim.GERI çağrıldığında deyim içerik yığını yukarı düzeydeki kullanıcı veya oturum açma bağlama geçer.Bu davranış bir örnek için bkz: Örnek A.

Bir kullanıcı veya oturum açma adı belirtme

yürütmek AS içinde belirtilen kullanıcı veya oturum açma adı <context_specification> içinde bir sorumlusu olarak mevcut olmalıdır sys.database_principals or sys.server_principals sırasıyla veya deyim başarısız AS yürütmek. Ayrıca, üzerinde anapara özelliklerini AL izinleri atanması gerekir.Arayanın, veritabanı sahibi veya üyesi olduğu sürece sysadmin sabit sunucu rolü, hatta kullanıcı veritabanı veya örnek erişirken anapara bulunmalıdırSQL Server Windows Grup üyeliği. Örneğin, aşağıdaki koşullar varsayalım:

  • CompanyDomain\SQLUsers grup erişimiSatış veritabanıdır.

  • CompanyDomain\SqlUser1 üyeSQLUsers ve bu nedenle, örtülü erişebilirSatış veritabanıdır.

Ancak CompanyDomain\SqlUser1 üyeliğiyle veritabanına erişimi vardır.SQLUsers deyim grubu EXECUTE AS USER = 'CompanyDomain\SqlUser1' başarısız olur CompanyDomain\SqlUser1 veritabanındaki bir sorumlusu olarak mevcut değil.

Kullanıcı artık, (ilişkili oturumu artık), ve kullanıcı ile oluşturulmadı WITHOUT LOGIN, EXECUTE AS kullanıcı için başarısız olur.

En iyi yöntem

Bir oturum açma veya oturum sırasında operasyonları gerçekleştirmek için gereken en az ayrıcalıklara sahip bir kullanıcı belirtin.Veritabanı düzeyinde izinler gereklidir; yalnızca, örneğin, bir oturum açma adı sunucu düzey izinlerle belirtmezseniz veya bu izinleri gerekli olmadığı sürece bir veritabanı sahibi hesabını belirtin.

HIÇBIR geri DÖNDÜRME ILE kullanma

Zaman yürütmek GERI kullanarak HIÇBIR GERI yan tümce, oturum yürütmek içeriği ayarlanamaz bir isteğe bağlı WITH deyim içeren AS veya başka bir yürütmek AS deyim yürütülüyor.Oturum bağlantı kesildiğinde kadar beyannamenin ayarlamak içerik etkiler kalır.

Zaman HIÇBIR GERI tanımlama BILGISI = @varbinary\_variablBelirtilen e yan tümce, SQL Server Database Engine @ tanımlama bilgisinin değeri 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 aynı içerir. @varbinary\_variable Değer.

Bir ortam havuzu hangi bağlantıda kullanılan bu seçenek kullanışlıdır.Bağlantı havuzu, bir grup veritabanı bağlantıları yeniden kullanmak üzere bir Uygulama sunucusundaki uygulamalar tarafından bakım olur.Geçilen değer için @varbinary\_variable yürütmek AS çağırana yalnızca bilinen bunlar kurmak yürütmek içeriği başka biri tarafından değiştirilemeyeceğini çağıran deyim, garanti edilmektedir.

Özgün oturum açma belirleme

Use original_login örneğine bağlı oturum açma adını döndürmek işlevininSQL Server. Özgün oturum açma kimliğini içinde olduğu çok açık veya örtülü bağlam anahtarlarının oturumlarına dönmek için bu işlev kullanın.

İzinler

Arayanın, bir oturum açma üzerinde yürütmek AS belirtmek için , belirtilen oturum açma adına özelliklerini AL izinleri olmalıdır.Bir veritabanı kullanıcı yürütmek AS belirtmek için , arayanın özelliklerini AL belirtilen kullanıcı adına izinleriniz olmalıdır.Özelliklerini AL izinleri, yürütmek AS ARAYANıN kimliği belirtildiğinde, gerekli değildir.

Örnekler

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

Aşağıdaki örnek, birden çok sorumluları'nı kullanarak bir içerik yürütmeye yığını oluşturur.The REVERT deyim is then used to reset the execution context to the previous caller. The REVERT deyim is executed multiple times moving up the stack until the execution context is küme to the original caller.

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 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 current execution context.
SELECT SUSER_NAME(), USER_NAME();
REVERT;
--Display current execution context.
SELECT SUSER_NAME(), USER_NAME();

--Remove 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, yürütme içeriği ayarlar bir oturum belirtilen kullanıcıya ve WITH NO REVERT TANıMLAMA = @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 in a safe location 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