Aracılığıyla paylaş


yan tümce (Transact-SQL) yürütmek

InSQL Server, kullanıcı tanımlı aşağıdaki modüller yürütme bağlamında tanımlayabilirsiniz: İşlevler (satır içi tablo değerli işlevler dışında) yordamları, sıralar ve tetikler.

Modülü yürütüldüğünde içerik belirterek, hangi kullanıcı hesabını denetleyebilirDatabase Enginetarafından başvurulan nesne izinlerini doğrulamak için kullandığı modül.Bu ek esneklik ve kullanıcı tanımlı modülleri ve bu modülleri tarafından başvurulan nesneler arasında nesne zinciri üzerinde izinleri yönetme kontrol sağlar.Belirtilen nesneler erişim izinlerini vermek zorunda kalmadan yalnızca modülü, kullanıcı için izin verilmelidir.Modül çalıştıran kullanıcı bir modül tarafından erişilebilir nesneleri izinleriniz olmalıdır.

Topic link iconTransact-SQL sözdizimi kuralları

Functions (except inline table-valued functions), Stored Procedures, and DML Triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | OWNER | 'user_name' } 

DDL Triggers with Database Scope
{ EXEC | EXECUTE } AS { CALLER | SELF | 'user_name' } 

DDL Triggers with Server Scope and logon triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | 'login_name' } 

Queues
{ EXEC | EXECUTE } AS { SELF | OWNER | 'user_name' } 

Bağımsız değişkenler

  • ARAYAN
    Modül içindeki ifadeler modülünün çağıran içeriğinde çalıştırılan belirtir.Modülde kendisi kalmayıp aynı zamanda modülü tarafından başvurulan veritabanı nesneleri üzerinde çalıştırma modülü kullanıcı iznine sahip olmalısınız.

    ARAYAN sıraları dışındaki tüm modülleri için varsayılan değer ise aynıSQL Server 2005davranış.

    ARAYAN QUEUE CREATE veya ALTER QUEUE deyim belirtilemez.

  • SELF (KENDİ)
    yürütmek AS SELF yürütmek AS eşdeğeruser_nameburada belirtilen kullanıcı olan kişi oluşturma veya değiştirme modülü.Kişi oluşturma veya modülleri değiştirme gerçek kullanıcı kimliği saklananexecute_as_principal_id Katalog görünümü. sql_dependencies veya sys.service_queues sütun

    SELF sıralar için varsayılandır.

    Not

    Kullanıcı Kimliğini değiştirmek içinexecute_as_principal_idsys.service_queues Katalog görünümü, açıkça yürütmek AS QUEUE ALTER deyim. ayarı belirtmeniz gerekir

  • Sahip
    Modül içindeki ifadeler geçerli sahibi modülü kapsamında yürüten belirtir.Belirli bir kullanıcıya modülü yoksa, modülün şema sahibini kullanılır.DDL veya oturum açma için tetikleyici sahip belirtilemez.

    Important noteImportant Note:

    SAHİP bir tek hesabına eşlenmelidir ve rol ya da grup olamaz.

  • 'user_name'
    Modül içindeki ifadeler yürütmek kullanıcı bağlamında belirtir belirtilenuser_name.Permissions for any objects within the module are verified against user_name.user_name cannot be specified for DDL triggers with server scope or logon triggers.Kullanımılogin_name yerine.

    user_name must exist in the current database and must be a singleton account.user_name cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.

    Yürütme içeriği kullanıcı Kimliğini meta veriler olarak saklanır ve görüntülenebilirexecute_as_principal_id Katalog görünümü. sql_dependencies veya sys.assembly_modules sütun

  • 'login_name'
    Modülü içindeki ifadeler yürütmek bağlamında belirtirSQL Serveroturum açma belirtilenlogin_name.Permissions for any objects within the module are verified against login_name.login_name can be specified only for DDL triggers with server scope or logon triggers.

    login_name bir grup, rol, sertifika, anahtar veya NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService veya NT AUTHORITY\LocalSystem gibi yerleşik hesap olamaz.

Remarks

NasılDatabase Engine, başvurulan nesnelerinde izinleri veren nesneler ve referansta bulunulan nesneler. arama arasında bulunan sahiplik zinciri modülü bağlıÖnceki sürümlerindeSQL ServerSahiplik zincirleme olan tüm belirtilen nesnelere. arayan kullanıcı erişimi vermek gerek önlemek kullanabileceğiniz tek yöntem,

Sahiplik zincirleme aşağıdaki sınırlamalara sahiptir:

  • Yalnızca DML deyimlerini uygulanır: SELECT, INSERT, UPDATE ve DELETE.

  • Arama ve çağrılan nesnelerin sahiplerini aynı olması gerekir.

  • Modül içindeki dinamik sorguları için geçerli değildir.

Sahiplik zincirleme, hakkında daha fazla bilgi için bkz:Sahiplik chains.

Modül içinde belirtilen yürütme içeriği ne olursa olsun, her zaman aşağıdaki işlemleri uygulayın:

  • Modülü yürütüldüğünde,Database Engineilk yürütmek modülü kullanıcı modülü. yürütmek izni olan doğrular

  • Sahiplik zincirleme kuralları uygulamak devam edin.Yani, çağıran ve çağrılan nesnelerin sahipleri aynıysa, alt nesnelerin izin denetlenir.

Kullanıcının ARAYAN dışındaki bir bağlamda çalışmasına belirtilen bir modül yürütüldüğünde, modül çalıştırmak için kullanıcının iznini kontrol edilir; ancak ek izinler denetim modülü tarafından erişilen nesneler üzerinde yürütmek AS içinde belirtilen kullanıcı hesabının karşı gerçekleştirilir yan tümce.Çalıştırma modülü, gerçekte, belirtilen kullanıcı kimliğine bürünüyor kullanıcıdır.

AS yan tümce modülü yalnızca modülü yürütmek süresi için geçerlidir yürütmek belirtilen içeriği.İçerik Modülü Yürütme tamamlandığında çaðýrana geri döner.Bir modülde yürütme içeriği değiştirme hakkında daha fazla bilgi için bkz:yürütmek AS modüllerde kullanma.

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

Başka bir komutun altında çalıştırmak için yürütmek AS yan tümce bir modülün modül kadar bırakılan belirtilen veritabanı kullanıcının veya sunucunun oturumu değiştirildi.

yürütmek AS içinde belirtilen kullanıcı veya oturum açma adı yan tümce bir patron olarak varolması gerekirsys.database_principals veya sys.server_principals , sırasıyla ya da başka oluşturma veya değiştirme modülü işlemi başarısız olur. Ayrıca, oluşturan veya değiştiren modülü kullanıcı özelliklerini al patron izinleriniz olmalıdır.

Kullanıcı, sahip örtülü kopyası ve veritabanı erişimiSQL ServerModül oluşturduğunuzda yan dolaylı olarak oluşturulan AS Windows Grup üyeliği yürütmek, aşağıdaki gereksinimleri var belirtilen kullanıcı:

  • Belirtilen kullanıcı veya oturum açma üyesi olanSistem Yöneticisi sunucu sabit rolü.

  • Modül oluşturma kullanıcı ilkeleri oluşturma izni vardır.

Ne Bu gereksinimler karşılandığında, modül oluşturma işlemi başarısız olur.

Important noteImportant Note:

,SQL Server(MSSQLSERVER) hizmetini yerel çalışan bu. yürütmek AS içinde belirtilen bir Windows etki alanı hesabının grup üyeliklerini elde etmek için ayrıcalıkları hesabınızın (yerel hizmet veya yerel kullanıcı hesabı) yan tümce.Bu, yürütme modülü başarısız olmasına neden olur.

Örneğin, aşağıdaki koşullar varsayalım:

  • CompanyDomain\SQLUsers Grup Satış veritabanına erişebilir.

  • CompanyDomain\SqlUser1SQLUsers bir üye ve bu nedenle, Satış veritabanında. erişimi

  • Oluşturma veya değiştirme modülü kullanıcı ilkeleri oluşturma izinleri vardır.

, AşağıdakiCREATE PROCEDUREdeyim çalıştırılanCompanyDomain\SqlUser1dolaylı olarak veritabanı olarak, asıl oluşturulanSalesveritabanı.

USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO

yürütmek AS ARAYAN tek başına deyim kullanarak

Bir modül bağımsız yürütmek AS ÇAĞIRAN ifadeye modülünün çağırana yürütmek içeriği ayarlamak için kullanın.

Aaıdaki saklı yordamı varsay verilirSqlUser2.

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'SqlUser1'
AS
SELECT user_name(); -- Shows execution context is set to SqlUser1.
EXECUTE AS CALLER;
SELECT user_name(); -- Shows execution context is set to SqlUser2, the caller of the module.
REVERT;
SELECT user_name(); -- Shows execution context is set to SqlUser1.
GO

Özel izin kümesi tanımlamak için yürütmek AS kullanarak

Ayarlar belirtme özel izinleri tanımlamak istiyorsanız, bir yürütme içeriği bir modül için çok yararlı olabilir.Örneğin, TRUNCATE tablo gibi bazı eylemler grantable izinlere sahip değilsiniz.TRUNCATE tablo deyim modülü ve bu modül, tabloyu değiştirmek için izinleri olan bir kullanıcı olarak çalıştır belirtme ekleme tarafından modülü üzerinde yürütmek izni vermek için kullanıcı tabloyu kesmek için izinleri genişletebilirsiniz.Daha fazla bilgi için bkz:Özel bir izin kümesi oluşturmak için yürütmek AS kullanma.

Belirtilen yürütme içeriği modülüyle tanımını görüntülemek içinsql_dependencies (Transact-SQL)Katalog görünümü.

En iyi yöntemler

Bir oturum açma veya modülü içinde tanımlanan işlemleri gerçekleştirmek için gereken en az ayrıcalıklara sahip bir kullanıcı belirtin.Bu izinler gerekli olmadıkça, bir veritabanı sahibi hesabını belirtmeyin.

İzinler

EXECUTE AS ile belirtilen bir modül yürütmek için arayan olmalıdır EXECUTE izinleri modülü.

Başka bir veritabanı veya sunucu kaynaklarına erişen yürütmek AS ile belirtilen bir CLR modül çalıştırmak için hedef veritabanı veya sunucunun güven gerekir doğrulayıcı veritabanı modülü kaynaklandığı (kaynak veritabanı).Kimlik doğrulayıcının güven oluşturma hakkında daha fazla bilgi için bkz:yürütmek AS'nı kullanarak veritabanı kimliğe bürünme genişletme.

yürütmek AS belirtmek için bir modül oluşturduğunuzda veya değiştirdiğinizde yan tümce olmalıdır özelliklerini Al izinlerini belirtilen anapara ve modül oluşturma izinleri.Her zaman kendi özelliklerini alabilir.Özelliklerini Al izinlerini yürütmek AS ARAYAN belirtilen ya da hiçbir yürütmek içeriği belirtilen gerekli değildir.

Belirtmek için birlogin_nameoruser_nameKapalı bir Windows Grup üyeliği yoluyla veritabanına erişimi olan, veritabanını. Denetim izinleri olması gerekir

Örnekler

Aşağıdaki örnek, bir saklı yordam oluşturur ve yürütme içeriği için atar.OWNER.