execute (Transact-SQL)

Yürütme içeriği oturumayarlar.

Varsayılan olarak, bir kullanıcı her oturum açtığında ve kullanıcı oturumu kapattığında sona erer bir oturum başlatır.oturum sırasında tüm işlemleri izin denetimleri kullanıcı karşı tabidir.execute as, deyim çalıştırıldığında, yürütme bağlamında oturum için belirtilen oturum açma veya kullanıcı adı geçti.bağlam değiştirmesonrasında, izinlerini execute as aramakta kişi yerine bu hesap için oturum açma ve kullanıcı güvenlik belirteçlerini karşı denetlenir deyim.Esas olarak, kullanıcı veya oturum açma hesabı oturum veya modül yürütme süresi için özellikleri veya bağlam değiştirme açıkça dönüştürüldükten.Yürütme içeriği hakkında daha fazla bilgi için bkz: Yürütme içeriği anlama.İçerik Geçişi hakkında daha fazla bilgi için bkz: İçerik Geçişi anlama.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

{ 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.Sunucu düzeykimliğe bürünme kapsam olur.

  • KULLANICI
    İçerik özellikleri için geçerli veritabanında bir kullanıcı belirtir.Geçerli veritabanı için kimliğe bürünme kapsam sınırlıdır.bağlam değiştirme için bir veritabanı kullanıcısı kullanıcının server -düzey izinleri devralmaz.

    Önemli notÖnemli

    bağlam değiştirme veritabanı kullanıcısı için etkin durumdayken veritabanı dışındaki kaynaklara erişmek için herhangi bir girişim deyim başarısız olmasına neden olur.Bu kullanım içerir database ifadeleri, dağıtılmış sorgular ve sorguları kullanan başka bir veritabanına başvuruüç veya dört part tanımlayıcıları.kapsam bağlam değiştirme geçerli veritabanı dışında genişletmek için bkz: execute as kullanarak veritabanı kimliğe bürünme genişletme.

  • 'name'
    Geçerli kullanıcı veya oturum açma adıdır.namebir üye olmanız sysadmin sabit sunucu rolü, ya da bir asıl olarak mevcut sys.database_principals veya sys.server_principals, sırasıyla.

    nameyerel bir değişken olarak belirtilebilir.

    nametek bir hesap olmalıdır ve bir grup, rol, sertifika, anahtarveya nt AUTHORITY\LocalService, nt AUTHORITY\NetworkService veya nt AUTHORITY\LocalSystem gibi yerleşik hesap olamaz.

    Daha fazla bilgi için bkz: bir kullanıcı veya oturum açma adı belirtme bu konuda daha sonra.

  • HİÇBİR GERİ DÖNDÜRME
    bağlam değiştirme önceki içeriğe geri dönülemez belirtir.

    Önceki içerik dönüştürme hakkında daha fazla bilgi için bkz: DÖNMEK (Transact-SQL).

  • TANIMLAMA BİLGİSİ İÇİNE@varbinary_variable
    Yürütme içeriği yalnızca açışınızdan önceki içeriğe arama ile tanımlama bilgisi DÖNMEK deyim doğru içeriyorsa belirtir @varbinary_variable değer.Veritabanı Altyapısı Geçirmeden tanımlama bilgisi için @varbinary_variable.

    @varbinary_variableis varbinary(100).

  • ARAYAN
    Modül içindeki deyimleri modülü arayan bağlamında yürütülür bir modül içinde kullanıldığında belirtir.

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

Açıklamalar

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

  • Başka bir execute as deyim çalıştırın.

  • Geri DÖNDÜRME deyim çalıştırın.

  • oturum bırakılır.

execute as çağrılarak yürütme içerik yığını oluşturma deyim birden çok kez birden fazla sorumluları arasında.Çağrıldığında, geri DÖNDÜRME deyim içeriğini oturum açma veya kullanıcı sonraki düzey yukarı içerik yığını içinde geçirir.Bu davranış bir örnek için bkz: örnek bir.

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

execute as içinde belirtilen kullanıcı veya oturum açma adı <context_specification> bir asıl olarak mevcut olmalıdır sys.database_principals veya sys.server_principals, sırasıyla ya da execute deyim başarısız.Ayrıca, patron sunucu üzerinde özelliklerini Al izni verilmelidir.Arayan veritabanı sahibi veya üye olduğu sürece sysadmin sabit sunucu rolü, patron bulunmalıdır bile olduğunda veritabanı veya örnek , kullanıcının eriştiği SQL Server Windows-Grup üyeliği.Örneğin, aşağıdaki koşullar varsayılmaktadır:

  • CompanyDomain\SQLUsersGrup erişimi olan Sales veritabanı.

  • CompanyDomain\SqlUser1üye olduğu SQLUsers ve bu nedenle, örtülü erişimi Sales veritabanı.

Rağmen CompanyDomain\SqlUser1 veritabanına üyeliği yoluyla erişimi olan SQLUsers grubu, deyim EXECUTE AS USER = 'CompanyDomain\SqlUser1' başarısız olduğundan CompanyDomain\SqlUser1 veritabanında bir patron olarak yok

Kullanıcı artık, (artık ilişkili oturumu varsa) ve kullanıcı OTURUMU olmadan oluşturulmadı, execute as kullanıcı için başarısız olur.

En iyi

Bir oturum açma veya oturumişlemleri gerçekleştirmek için gereken en az ayrıcalıkları olan bir kullanıcı belirtin.Örneğin, server -düzey iznine sahip bir oturum açma adı belirtmezseniz, yalnızca bir veritabanı -düzey izinleri gereklidir; veya bu izinleri gerekli olmadıkça bir veritabanı sahibi hesabını belirtmeyin.

HİÇBİR geri DÖNDÜRME ile kullanma

execute deyim no isteğe bağlı içerir gibi döndüğünüzde yan tümce, bir oturum yürütme içeriği Geri Al'ı kullanarak sıfırlanamaz veya başka bir execute as deyimyürütme.Bağlam küme deyim tarafından oturum kesilmeden kadar yürürlükte kalır.

Zaman ile Hayır DÖNMEK tanımlama = @varbinary_variable yan tümce belirtilirse, SQL Server Veritabanı Altyapısı için bir çerez gönderir @varbinary_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çeren aynı @varbinary_variable değer.

Hangi bağlantı biriktirmesinin kullanılması ortamında bu seçenek kullanışlıdır.Bağlantı havuzu oluşturma veritabanı bağlantılarını yeniden kullanmak üzere bir uygulama sunucusundaki uygulamalar tarafından bir grup Bakımı olur.Geçirilen değer çünkü @varbinary_variable yalnızca execute as arayan bilinen çağıran deyim, garanti bunlar kurmak yürütme içeriği herhangi bir kişi tarafından değiştirilemeyeceğini.

Özgün oturum açma belirleme

Use ORIGINAL_LOGIN örnek bağlı oturum açma adını dönmek içinişlev SQL Server. Özgün oturum açma kimliğini oturumlar var olduğu çok açık veya örtülü bağlam anahtarları dönmek için bu işlev kullanabilirsiniz.

İzinler

Bir oturum açma execute as belirtmek için arayan özelliklerini al belirtilen oturum açma adına izinleriniz olmalıdır.execute as üzerindeki bir veritabanı kullanıcı belirtmek için arayan belirtilen kullanıcı adına özelliklerini Al izni olmalıdır.execute as ARAYAN belirtildiğinde, özelliklerini Al izinleri gerekli değildir.

Ö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.REVERTdeyim yürütme içeriği önceki çağrıyı sıfırlamak için kullanılan sonra. REVERTdeyim yürütüldüğünde birden çok kez hareketli Yukarı Yığın yürütme içeriği küme özgün Arayana kadar.

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 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 ile yan tümcekullanarak

Aşağıdaki örnek, belirtilen bir kullanıcının oturum yürütme içeriği ayarlar ve DÖNMEK ile ÇEREZ belirtir = @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 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