execute as modüller içinde kullanma

execute as aşağıdaki kullanıcı tanımlı modül yürütme içeriği tanımlamak için kullanılabilir: İşlevler, yordamları, sıralarını ve Tetikleyicileri.Örneğin, yürütme içeriği modül sahibi veya belirtilen kullanıcı modülü çağrıyı yapandan değiştirilebilir.Önceki sürümlerinde SQL Server, bu modülleri her zaman yürütmek bağlamında çağıran'ın modül.

İçerik Modülü yürütüldüğünde belirterek, hangi kullanıcı hesabını kontrol edebilirsiniz Veritabanı Altyapısı 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.Kullanıcıların modül modül yürütmek izinleri yeterlidir; Başvurulan nesneler üzerinde açık izinler gereklidir.Modül olarak çalıştığı kullanıcı modülü tarafından erişilen nesneler üzerindeki izinleri olmalıdır.

ARAYAN YÜRÜTME

Modül içindeki deyimleri modülü arayan bağlamında yürütülür execute as ARAYAN belirtir.

execute as ARAYAN aşağıdaki senaryolar için kullanın:

  • Deyimleri modülünde için istediğiniz yürütmek arayan kullanıcı olarak.

  • Temel deyimleri modülü arayan kullanıcı karşı iznini denetler ve alttaki nesnelerdeki izin denetimlerini atlamak için zincirleme sahipliği kullanan istiyor.Sahiplik zincirleme yalnızca dml deyimlerini için geçerli olduğunu unutmayın.Sahipliği zincir oluşturma hakkında daha fazla bilgi için bkz: Sahiplik Chains.

  • Alttaki gizleme nesneleri yalnızca başvuru nesneleri aynı mülkiyet kullanıcı veya, başvurulan ve bu nedenle şema gizleme sağlamak üzere zincirleme sahipliği güvenebilir uygulamanız gerekmez.

  • sql Server 2000 davranışı korumak istiyor.

ARAYAN senaryo execute

Mary, başvuran bir saklı yordam oluşturur bir tablo Gönül sahibi olmadığı ancak select izinlerine sahip.Filiz belirtir EXECUTE AS CALLER , CREATE PROCEDURE deyim, bu örnekte gösterildiği gibi:

CREATE PROCEDURE AccessTable
WITH EXECUTE AS CALLER
AS SELECT * FROM dbo.SomeTable;

Mary, sonra tan için saklı yordam üzerinde execute izinleri verir.Scott saklı yordam çalıştırıldığında Veritabanı Altyapısı doğrular he (arayan) olduğundan izni yürütmek saklı yordamı.Scott execute izni vardır ancak Mary başvurulan tablonun sahibi olmadığı için Veritabanı Altyapısı olup olmadığına bakar tan izinleri vardırtablo. Tan izinleri yoksa, saklı yordam deyim başarısız olur.

execute as kullanıcı_adı

yürütmek as user_name, modülün içindeki deyimleri yürütmek içinde belirtilen kullanıcı bağlamında belirtir user_name.

Kullanım execute as user_name aşağıdaki senaryolarda:

  • Deyimleri modülünde belirtilen kullanıcı bağlamında yürütmek için istediğiniz.

  • Sahipliği zincir üzerinde yeterli olmaz (örneğin, modülü farklı sahipliği nesneleriyle erişir) temeldeki gizlemek için şema ve başvurulan bu nesnelerdeki izinleri vermekten kaçının istiyor.

  • Özel izin küme oluşturmak istiyorsunuz.Örneğin, izinler için ddl sağlamak için işlemleri belirli izinleri için normalde sağlanamadı.Daha fazla bilgi için bkz: execute as özel izin kümeleri oluşturmak için kullanma.

    Not

    Bu modül yürütme içeriği değiştirildi kadar bir modül yürütme içeriği kesilmesini edemiyor gibi belirtilen kullanıcı.

execute as kullanıcı_adı senaryo

Mary, başvuran bir saklı yordam oluşturur bir tablo Gönül sahibi olmadığı ancak select izinlerine sahip.Filiz belirtir EXECUTE AS 'Mary' , CREATE PROCEDURE deyim, bu örnekte gösterildiği gibi:

CREATE PROCEDURE AccessMyTable
WITH EXECUTE AS 'Mary'
AS SELECT * FROM dbo.MyTable;

Mary tan için saklı yordam üzerinde execute izinleri verir.Scott saklı yordam çalıştırıldığında Veritabanı Altyapısı doğrular he olduğundan; saklı yordam yürütmek izni Ancak, Mary için başvurulan tablo izinleri denetlenir.Scott tablo üzerinde select izinleri doğrudan yok olsa, içeriğinde yordamı çalışırken, Mary, tabloda veri erişim izinleri olduğundan bu senaryoda, he yordamı verilere erişebilir.

SELF YÜRÜTME

execute as self execute as eşdeğer user_name, burada belirtilen kullanıcı olan kişi oluşturma veya değiştirme modülü.

execute as self aşağıdaki senaryolarda kullanın:

  • Kendinizi, bağlamında oluşturma veya değiştirme olarak çalıştırmak için modül deyimleri çalıştırmak istediğiniz kullanıcı olarak belirleyen bir kısayol istediğiniz.

  • Modüller içine arayan kullanıcılar için oluşturduğu bir uygulama olması ve bu kullanıcılar yürütme içeriği kullanarak oluşturulacak bu modüllerde istiyorsunuz.Bu senaryoda, tasarım zamanında bilmediğiniz saat ne arayan kullanıcı adıdır.

SAHİBİ OLARAK YÜRÜTME

Modül içindeki deyimleri modülü geçerli sahibinin bağlamında yürütür execute as sahibi belirtir.Belirtilen sahip modülü yoksa, modülün şema sahibini kullanılır.

Aşağıdaki senaryoda execute as sahibi kullanın:

  • Modül sahibi modülü değiştirmek zorunda kalmadan değiştirebilmesini istiyorsunuz.Yani sahibi otomatik olarak geçerli sahibi modülünün çalışma sırasında eşler saat.

SAHİBİ açık modülü sahibidir veya modül bir açık sahibi değil, şema modülü saat sahibi ise yürütülür.Bir tek hesap ve değil bir grup veya roldeki sahibi olmalıdır.Modülü, execute as sahibi belirtir ve açık bir sahibi vardır, bir grup veya roldeki modülü sahipliğini değiştirilemez.Bir şema sahipliğini bir rol veya grup execute as sahibi belirtir bir modül içerir ve modülleri açık bir sahibi yok, değiştirilemez.

SAHİBİ senaryo execute

Mary, başvuran bir saklı yordam oluşturur bir tablo Gönül sahibi olan.Filiz belirtir EXECUTE AS OWNER , CREATE PROCEDURE deyim, bu örnekte gösterildiği gibi:

CREATE PROCEDURE Mary.AccessMyTable
WITH EXECUTE AS OWNER
AS SELECT * FROM Mary.MyTable;

Mary tan için saklı yordam üzerinde execute izinleri verir.Scott saklı yordam çalıştırıldığında Veritabanı Altyapısı doğrular he olduğundan; saklı yordam yürütmek izni Ancak, Gönül yordam geçerli sahibi olduğu için başvurulan tablo izinlerini Mary için denetlenir.Mary şirketi bırakmaya karar verir ve Tom için yordam ve tablo sahipliğini değiştirir.Scott sahiplik değişiklikten sonra saklı yordam yürütüldüğünde, he sahibi Tom için otomatik olarak eşleştirildiği için yordam verilere erişmek yine de.