Aracılığıyla paylaş


İçerik Geçişi anlama

Yürütme içeriği kullanıcı veya oturum açma oturumuna bağlı tarafından belirlenen veya yürütme (arama) bir modül.Kimlik için hangi izinlerin karşı kurar yürütmek ifadeleri gerçekleştirmek veya Eylemler denetlenir.De SQL Server, yürütme içeriği başka bir kullanıcı veya oturum açma için execute as yürüterek değiştirilebilir deyim veya belirterek execute as yan tümce tümce tümcesinde modülü.Sonra bağlam değiştirme, SQL Server izinleri oturum açma ve kullanıcı için o hesabı arayan execute deyim veya olarak kişinin yerine karşı denetler.modül. Veritabanı kullanıcı veya SQL Server oturumu açma için kalan oturum veya modül yürütme veya bağlam değiştirme açıkça açışınızdan kadar bürünülür.Yürütme içeriği hakkında daha fazla bilgi için bkz: Yürütme içeriği anlama.

Açık içerik geçişi

Bir oturumu veya modül yürütme içeriği bir execute as kullanıcı veya oturum açma adı belirterek açıkça değiştirilebilir deyim.Kimliğe bürünme, aşağıdaki olaylardan biri oluşana kadar etkin kalır:

  • Oturum bırakılır.

  • Başka bir oturum açma veya kullanıcı bağlamı anahtarlanır.

  • İçerik için önceki yürütme içeriği dönüştürüldükten.

Açıkça başka bir kullanıcı kimliğine bürünmek için execute kullanarak önceki sürümlerinde setuser için benzer SQL Server.Daha fazla bilgi için bkz: execute as vs. SETUSER.

Açık Server düzeyi içeriği değiştirme

Yürütme içeriği sunucuda geçiş yapmak için düzey, execute as LOGIN'i kullanın = 'login_name' deyim.Oturum açma adı bir patron olarak görünür sys.server_principals, ve deyim arayan üzerinde belirtilen oturum açma adı özelliklerini Al izni olmalıdır.

Kimliğe bürünme, sunucu yürütme içeriği olduğunda kapsam düzey, aşağıdaki gibidir:

  • Oturum belirteci için login_name örnek tarafından kimlik SQL Server ve geçerli boyunca o örnek.

  • Server -düzey izinlerini ve rol üyeliklerini login_name ödenmiş olan.

Kullanım geri önceki içeriğe dönmek deyim.GERİ çağıran deyim oluştuğu kimliğe bürünme aynı veritabanında bulunması gerekir.

Örnek

Aşağıdaki örnekte, Peter Connelly, Adventure Works döngüsü, bir ağ yöneticisi oluşturmak istediği bir SQL Server oturum açma hesabı için yeni bir çalışan, Jinghao Liuhas.Peter's SQL Server login does not have the server-level permission required to create SQL Server logins, but it does have IMPERSONATE permission on adventure-works\dan1, a SQL Server login that does have the required server-level permission.Bağlandığında Peter SQL Server, oturumun yürütme içeriği HIS ondan türetilmiş SQL Server oturum açma.In order to create a SQL Server login, Peter temporarily assumes the execution context of adventure-works\dan1.HE sonra oturumu oluşturur.Son olarak, he kendi varsayılan izinleri siler.

-- Switch execution context to the adventure-works\dan1 login account.
EXECUTE AS LOGIN = 'adventure-works\dan1';
-- Create the new login account.
CREATE LOGIN Jinghao1 WITH PASSWORD = '3KHJ6dhx(0xVYsdf';
-- Revert to the previous execution context.
REVERT;

Açık veritabanı düzeyi içeriği değiştirme

İçerik veritabanına geçiş yapmak için düzey, execute as kullanıcı kullanın = 'user_name' deyim.Kullanıcı adı bir asıl olarak mevcut olmalıdır sys.database_principals ve deyim arayan belirtilen kullanıcı adına özelliklerini Al izni olması gerekir.

kapsam Yürütme içeriği veritabanı düzeyinde, kimliğe bürünme özelliğini gibidir:

  • Kullanıcı simgesi için user_name örnek tarafından kimlik SQL Server ve geçerli geçerli veritabanı.Geçerli veritabanının kullanıcı kimliğe bürünme kapsam dışında kalan genişletme hakkında daha fazla bilgi için bkz: execute as kullanarak veritabanı kimliğe bürünme genişletme.

  • Veritabanı düzey izinleri ve rol üyeliklerini user_name geçerli veritabanı için ödenmiş olan.Server -düzey açıkça kimliklere kullanıcı belirteci veya rol üyeliği ile verilen izinleri değil kabul edilir.

Kullanım geri önceki içeriğe dönmek deyim.GERİ çağıran deyim oluştuğu kimliğe bürünme aynı veritabanında bulunması gerekir.

Örnek

Aşağıdaki örnekte, François Ajenstat, bir veritabanı yöneticisi Adventure Works döngüsü için dbcc checkdb çalıştırmak istediği deyim karşı AdventureWorksDW veritabanı, ancak kendisinin Bunu yapmak için veritabanı düzey izinleri yok.Ancak, he özelliklerini Al izinleri kullanıcı üzerinde sahip dan1, bir firma olan gerekli izni.

Bağlandığında François AdventureWorksDW veritabanı, yürütme içeriği kendi kullanıcı güvenlik belirtecini eşleştirir.Deyimler yürütmek izinleri, HIS, birincil ve ikincil sorumlularına karşı denetlenir kullanıcı belirteci.HE dbcc checkdb çalıştırmak için gereken izinlere sahip olmadığından deyim, he aşağıdaki yürütür deyims.

-- EXECUTE AS USER = 'dan1';
-- Create a table in dan1's default schema
CREATE TABLE t_NewTable( data nvarchar(100) );
go
-- Revert to the previous execution context.
REVERT
go;

Örtülü bağlam geçişi

Saklı yordam, tetikleyici, kuyruk veya kullanıcı tanımlı bir işlev gibi bir modül yürütme içeriği bir execute as kullanıcı veya oturum açma adı belirterek örtülü olarak değiştirilebilir yan tümce tümce tümcesinde modülü tanımı.

İçerik Modülü yürütüldüğünde belirterek, hangi kullanıcı hesabını kontrol edebilirsiniz SQL Server kullanan tarafından başvurulan nesnelerin izinlerini doğrulamak içinmodül. Bu ek esneklik ve kullanıcı tanımlı modülleri ve bu modülleri tarafından başvurulan nesneler arasında var olan nesne zinciri üzerinde izinleri yönetme kontrol sağlar.Başvurulan nesne erişim izinlerini atayın gerek kalmadan modülde kendisi, kullanıcılara izinler verilebilir.Modül bürünülüyor kullanıcı modülü tarafından erişilen nesneler üzerinde izinlere sahip olması gerekir.

Kimliğe bürünme düzey, kimliğe bürünmeyi tanımlanan Modül türü tarafından belirlenir.

Server -düzey kimliğe bürünme aşağıdaki tanımlanabilir:

  • ddl Tetikleyicileri

Sunucu düzeyinde kimliğe bürünme kapsam "Olarak açık Server düzey içeriği değiştirme." önceden tanımlanmış aynıdır

Veritabanı -düzey kimliğe bürünme aşağıdaki tanımlanabilir:

  • dml Tetikleyicileri

  • Sıraları

  • Saklı yordamlar

  • Kullanıcı tanımlı işlevler

  • Veritabanı düzeyinde kimliğe bürünme kapsam ", açık veritabanı düzey içeriği değiştirme." önceden tanımlanmış aynıdır

  • Örtülü bağlam geçişi hakkında daha fazla bilgi için bkz: execute as modüller içinde kullanma.

Örnek

Aşağıdaki örnekte, Mary sahibidir tablo MyTable.Filiz tan tablo kesmek için kullanıcının istediği ancak tan doğrudan izin yok masadaki sahiptir.Bu nedenle Gönül oluşturur saklı yordam dbo.usp_TruncateMyTable ve tan. yordamı yürütme izinlerini verirScott saklı yordam çalıştırıldığında Veritabanı Altyapısı doğrular izinleri kesirli kısmını tablo gibi Mary kendisini yürütme saklı yordamı.Çünkü Gönül tablo sahip, deyim başarılı tan doğrudan izin yok dahi tablo kendisi.

CREATE PROCEDURE dbo.usp_TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;