Share via


yürütmek AS'nı kullanarak veritabanı kimliğe bürünme genişletme

SQL Server tek başına yürütmek AS deyim kullanılarak açıkça veya örtük olarak yürütmek AS'nı kullanarak başka bir patron taklit becerisini destekler modüller üzerinde yan tümce.Sunucu-CVE-2006-kimliğine bürünmek için tek başına yürütmek AS deyim kullanılan düzey sorumluları veya AS LOGIN yürütmek deyim kullanarak oturum açma.Tek başına yürütmek AS deyim veritabanı kimliğine bürünmek için de kullanılabilir düzey sorumluları veya AS USER yürütmek deyim kullanarak kullanıcıları,.

yürütmek modüller üzerinde yan tümce taklit AS belirtilen kullanıcı veya oturum açma veritabanı veya sunucu düzeyinde gerçekleştirilen örtülü impersonations.Bu kimliğe bürünme modülü sunucu düzeyinde tetikleyici gibi bir sunucu düzeyinde modülünün bir saklı yordam veya işlev gibi bir veritabanı düzey modülü olmasına bağlıdır.

Kimliğe bürünme kapsam anlama

Bir güvenlik sorumlusunun AS LOGIN yürütmek deyim kullanarak veya bir sunucu kapsamlı modülündeki yan tümce, Kimliğe bürünmeyi kapsamını Sunucu bazındaki AS the yürütmek kullanarak belirlerken.Bu içerik anahtarından sonra oturum açma kimliğine bürünülen izinlere sahip sunucu içindeki herhangi bir kaynağın erişilebileceğini anlamına gelir.

Ancak, bir güvenlik sorumlusunun AS USER yürütmek deyim kullanarak veya bir veritabanı kapsamlı modülündeki yan tümce, kimliğe bürünme kapsam için veritabanı varsayılan sınırlandırılır AS the yürütmek kullanarak belirlerken.Bunun anlamı, veritabanının kapsam dışında nesnelere başvurular bir hata döndürecektir.Bu varsayılan davranışı nedenini anlamak için aşağıdaki senaryoyu düşünün.

Çalışırken, o veritabanındaki tüm izinlere sahip bir veritabanının sahibi izinlerden kapsam dışında bir veritabanı yok olanaklıdır.Bu nedenle, SQL Server değil kimliğine bürünmek veritabanı sahibi izin veya başka birisi, ötesindeki kaynaklara erişmek için başka bir kullanıcının özelliklerini almasına olanak vermek kapsam geçerli izinler, veritabanı sahibi.

Örneğin, iki veritabanını barındırma ortamında göz önünde bulundurun ve her veritabanı için ayrı bir sahibi olan varlık ait.Database1 is owned by Bob and Database2 is owned by Fred.Ne Kemal ve Gamze ilgili veritabanlarının içindeki kaynaklara erişmek için diğer istemektedir.As the owner of Database1, Bob can create a user for Fred in his database and because he has full permissions within Database 1, Bob can also impersonate user Fred.Ancak, tarafından konulan güvenlik sınırlamaları nedeniyle SQL ServerKemal Gamze çubuğundaki veritabanı Kimliğine bürünülen bağlamında erişemiyor. Kemal yerinde bu varsayılan kısıtlamaları, kendi bilgi olmadan Gamze çubuğundaki verilere erişimini olacaktır.Bu nedenle, kapsam veritabanı düzey impersonations varsayılan olarak veritabanı tarafından bağlanmış.

Ancak, seçmeli olarak yararlı olabilir, bazı senaryolarda genişletme kapsam kimliğe bürünme dışında bir veritabanı.Örneğin, bu durum, iki veritabanını kullanır ve başka bir veritabanından bir veritabanına erişmesi gereken bir uygulama ile olacaktır.

durum pazarlama adında bir depolanmış yordamı çağıran uygulamanın göz önünde bulundurun. GetSalesProjections in the Pazarlama veritabanı ve saklı yordam içinde tanımlanan bir yürütme içeriği anahtarı vardır.Içine saklı yordamı çağıran Satış satış bilgilerini almaya veritabanıSalesStats tablosudur.Bu veritabanı dışında bir veritabanı içinde oluşturulmuş bir yürütme içeriği geçersiz olduğundan varsayılan olarak, bu senaryo, çalışmaz.Bununla birlikte, pazarlama uygulama geliştiricilerin doğrudan erişim sağlamak için pazarlama uygulamanın kullanıcılarından oluşan istemediğiniz Satış veritabanı veya içindeki herhangi bir nesne izinlerine sahip.yürütmek AS kullanmak için en uygun çözüm olurdu yan tümcesinde, gerekli izinlere sahip kullanıcının kimliğine bürünmek için saklı yordam Satış veritabanıdır.Ancak, şu anda bir yerde varsayılan kısıtlamalar bu engeller.Bu nedenle, sorunun nasıl geliştiriciler bu sorunu çözümlemek için olur.

Içinde SQL Server, seçmeli olarak genişletebilirsiniz kapsam iki veritabanı arasında bir güven modeli oluşturarak, bir veritabanı içinde oluşturulan veritabanı kimliğe bürünme. Ancak, bu güven modeli açıklayan önce ve nasıl kapsam, Kimliğe bürünmeyi seçerek genişletilmesi, kimlik doğrulaması ve rolünü Doğrulayıcı kavramanız gerekir SQL Server.

Anlama Kimlik doğrulayan

Işlem tarafından hangi kimlik doğrulaması olan belirli bir sorumlusu oluşturur ve bir sistem için kendi kimliğini kanıtlar.Bir doğrulayıcı doğrular veya, belirli bir patron özgünlüğünü taşıyıcısının onaylamak üzere bir varlık.Örneğin, bir bağlantı yapılır SQL Server, örnek tarafından o bağlantı kimlik doğrulaması için kurulmuş olan oturum açma SQL Server.

durum, kullanıcı açıkça içeriğini sunucu-geçirir dikkate düzey AS LOGIN yürütmek deyim kullanarak.Bu sunucuda kimliğe bürünme izinleri gerektirir düzey.Bu izinleri grantee, arayanın yürütmek AS LOGIN ifadesinin özelliği örnek her yerde'içinde belirtilen oturum açma kimliğine bürünmek için izin ver SQL Server. Etkin deyim içinde bir günlük gibi Kimliğine bürünülen oturum açma işlemi benzetimini yapmak arayanın sağlar.Sunucu düzeyinde izinlerinin kapsamını sahibidir sysadmin örneğinin sahip.SQL Server. Bu durumda, sunucu-CVE-2006-düzey kimliğe bürünme, kimlik doğrulayıcı sysadmin veya örnekSQL Server kendisini.

Ancak, hangi içerik kurulmuş bir AS USER yürütmek deyim veya bir yürütmek AS nedeniyle, durum dikkate veritabanı kapsamlı bir modülde yan tümce.Bu durumda, kimliğe bürünme izinleri içinde kapsam veritabanını denetlenir.Sahibi, veritabanının kendisi, kullanıcıların özelliklerini Al izinlerini kapsam için varsayılandır dbo.Ayrıca, bu impersonations, veritabanı sahibi doğrulayıcı.Ayrıca, kimin, gerçekte, Kimliğine bürünülen kullanıcının kimliğini oluşturur ve, bir Özgünlük belgesi için taşıyıcısının onaylamak üzere veritabanı sahibi olur.Veritabanı sahibi tam veritabanı sahibi olmadığından, Kimliğine bürünülen içerik her yerde belirli veritabanında gerçek kabul edilir.Ancak, veritabanına dışında Kimliğine bürünülen içeriği geçerli değil.

Kimlik doğrulayan bir nasıl kullanılır

Doğrulayıcı, kurulu olan bir içerik içinde belirli bir kapsam geçerli olup olmadığını belirlemek için kullanılır.Genellikle, ya da Sistem Yöneticisi (SA) doğrulayıcı veya örnek, SQL Server, veya veritabanlarında, dbo.Etkin içinde belirli bir kullanıcı veya oturum açma bağlamının belirlenen kapsam sahibine doğrulayıcı.Bu kimlik bilgileri içindeki kullanıcı ve oturum açma için tutulan bir belirteç bilgileri yakalanan ve aracılığıyla görülebilir sys.user_token and sys.login_token görünümler.Daha fazla bilgi için bkz:Yürütme içeriği'ni anlama.

Not

Kimlik bilgisi yok simge görünümündeki döndürülürse, örnek doğrulayıcı SQL Server. Bu içerik yok ise doğrudur Kimliğe bürünmeyi sunucu düzeyinde olup olmadığını veya geçiş.

Bu kapsam üzerinde bir kapsam sahibi olarak, doğrulayıcı olan bir yürütme içeriği geçerli değil.Kapsam, örneğin, bir veritabanı sahibi kapsamındaki tüm varlıklar tarafından örtülü olarak güvenilen olmasıdır.Bağlamı da diğer kapsamlar arasında diğer veritabanlarını veya örneğini geçerlidir SQL Server kendi doğrulayıcı olduğu Güvenilen.Bu nedenle, doğrulayıcı'içeriği hedef kapsamı içinde güvenilir olup veritabanının kapsam kimliğine bürünülen kullanıcı haricinde geçerliliği bağlıdır.Bu hedef kapsam örnek ise hedef kapsam başka bir veritabanı, doğrulayıcı AUTHENTICATE iznine veya SUNUCU kimlik DOĞRULAMASı izin vererek güven SQL Server.

Genişletme kapsam, kimliğe bürünme

Genişletmek için kapsam kimliğe bir bürünme bir veritabanı içinde bir hedefe kapsam gibi başka bir veritabanı veya örnek SQL Server, aşağıdaki koşulların yerine getirilmesi gerekir.

  • Hedef kapsamda güvenilir doğrulayıcı gerekir.

  • kaynak veritabanı güvenilir bir olarak işaretlenmesi gerekir.

doğrulayıcı güvenme

Önceki kullanma Satış and Pazarlama veritabanlarının örnek, saklı yordam aşağıda gösterilmiştir.GetSalesProjections in the Pazarlama verilere veritabanıSalesStats tablosundaSatış veritabanıdır.saklı yordam yan tümce içeren yürütmek AS USER MarketingExec.Sahibi Satış veritabanıdırSalesDBO ve sahibiPazarlama veritabanıdırMarketingDBO.

EXECUTE AS switches execution context of a module

Zaman GetSalesProjections depolanmış yordamın yan tümce, saklı yordam arayan kullanıcıdan yürütmek içeriği örtülü olarak geçer AS the yürütmek kullanıcı tarafından çağrılırMarketingExec kullanıcı.Bu bağlama için kimlik doğrulayıcı MarketingDBO sahibiPazarlama veritabanıdır.Varsayılan olarak, bu yordamın içinde herhangi bir kaynağa erişim Pazarlama veritabanı MarketingExec kullanıcı erişmesine izin verilir.Ancak, bir tabloya erişmeye Satış veritabanıSatış veritabanı doğrulayıcı güvenmelidirMarketingDBO.

Bir kullanıcı oluşturarak bunu yapabilirsiniz Satış veritabanı adıMarketingDBO için eşleyenMarketingDBO oturum açma'yı ve sonra da kullanıcının AUTHENTICATE izni vermeSatış veritabanıdır.Sonuç olarak, bu izin, doğrulayıcı olarak grantee olan herhangi bir yürütme içeriği veritabanı içinde geçerli değil.Çünkü doğrulayıcı MarketingDBO AUTHENTICATE izin verilirSatış veritabanı, kullanıcı bağlamınınMarketingExec yürütmek AS tarafından belirlenen yan tümceGetSalesProjections içinde saklı yordamınıPazarlama içinde veritabanı güvenilenSatış veritabanıdır.

Bu örnek, genişletme gösterir ancak kapsam nesne bir dış veritabanında izin vermek için kimliğe bürünme Ayrıca, genişletmek mümkündür kapsam örneğine kimliğe bürünme SQL Server. Yordam sunucu-olan bir oturum oluşturmak için örneğin, düzey içeriğinin doğrulayıcı için verilebilmesi bir sunucu bazındaki izin gerektiren bir eylem SUNUCU kimlik DOĞRULAMASı iznine sahip.Bu, anlambilim var grantee, doğrulayıcı olarak kimlik DOĞRULAMASı, SUNUCU izni olan herhangi bir içerik içinde tam güvenilen örnek, SQL Server**,** bağlamı için oturum gibi örnek SQL Server doğrudan.

Veritabanı güvenme

Içinde SQL Server, güven modeli, ek güvenlik ve genişletme işlemi için taneciklik sağlamak için bir daha fazla adım gider kapsam veritabanı düzeyinde kimliğe bürünme. AUTHENTICATE izin hedef kapsam için bir yol olarak bir içeriğinin kimlik doğrulayıcının güven oluşturmak için kullanabileceğiniz, ancak öğeleri de belirleyebilirsiniz olup olmadığını örnek SQL Server Kaynak veritabanı ve içindeki içeriği güvenir.

Bunu göstermek için kabul MarketingDBO sorumlusu adlı başka bir veritabanı sahibiKonferans.Ayrıca, varsayar MarketingDBO içinde belirtilen yürütme içeriği istemektedir.Pazarlama kaynaklara erişim için veritabanıSatış veritabanıdır.Bununla birlikte, oluşturulan tüm kapsamları istemediği Konferans erişimi tüm veritabanıSatış veritabanıdır.

Bu gereksinimin elde etmek için , hangi kaynaklara veritabanı dışındaki bir kimliğe bürünme bağlamı kullanılır modülü içeren veritabanı güvenilir'olarak işaretlenmelidir.Bu özellik TRUSTWORTHY gösterir olup olmadığını örnek SQL Server veritabanını ve içeriği içindeki güvenir. TRUSTWORTHY özellik, iki amaca hizmet eder:

  1. Bunu ilişik veritabanlarından gelen tehdidi azaltır örnek, SQL Server ve olası kötü amaçlı modülleri yüksek ayrıcalığı kullanıcı bağlamı altında çalıştırmak için tanımlanan içerebilir.

    Bu işlem, ekli veritabanlarının varsayılan olarak güvenilir işaretlenmemiş olmasını sağlayarak gerçekleştirilir.Ayrıca, veritabanının güvenilir işaretlenmesi olası kötü amaçlı modülleri arasında veritabanı dışında bir kaynaklara erişimi gerektirir sağlayarak gerçekleştirilir.Bir veritabanında TRUSTWORTHY özellik ayarını üyelerine sınırlandırılır sysadmin sabit sunucu rolü.

  2. Yöneticinin örneğinin SQL Server ne zaman veritabanlarının aynı olduğu değil gerekir ve bir dış kaynaklara erişmeye izin verilmesi gerektiğini ve veritabanları arasında ayrım yapmak için sahip ve bu sahibi, bir doğrulayıcı bazı olarak güvenilir kapsam.

Bu davranış, kullanılarak denetlenebilir TRUSTWORTHY özellik.Örneğin, bir veritabanındaki veritabanı 1, Kimliğine bürünülen bağlamları bağlamları başka bir veritabanından, veritabanı 2'de, güvenilen olmalıdır ve her ikisi de Hedef kapsamda bir kimlik doğrulayıcı olarak güvenilir olan aynı sahibi olan Güvenilir olması gereken yerde bir durumu olduğunu varsayalım.Açık için TRUSTWORTHY özellik ayarlanabilir. database1 ve KAPALı bir kümeye içindatabase2 emin olmak için modüllerdeVeritabanı 2 kaynakları dışında bir veritabanına erişemiyor.

Aşağıda, kaynak veritabanı kapsam dışında kaynaklara erişimi denetlemek için TRUSTWORTHY veritabanı özelliğini kullanımını göstermektedir.MarketingDBO AUTHENTICATE izin verilirSatış veritabanı ve bir iki sahibiPazarlama and Konferans veritabanları.The GetSalesProjections saklı yordam in the Marketing database can successfully access the Sales database, because it meets the two security requirements: doğrulayıcıMarketingDBOHedef kapsam ve kaynak veritabanı, , güvenilenPazarlama, güvenilir olduğundan.Erişmeye Satış veritabanındanKonferans veritabanı engellendi, tek bir gereksinimin karşılandığından çünkü: doğrulayıcıMarketingDBO, hedef güveniliyor kapsam.

Controlling database access to external resources

Her örnek Kimliğine bürünülen bir içerik veritabanı kapsam dışında bir kaynağa erişmek için yapılan SQL Server gelen istek başlatıldığı veritabanı'nın güvenilir olduğunu ve Kimlik Doğrulayıcı'nın güvenilir olduğunu doğrular.

Sertifikaları ve asimetrik anahtar olarak kimlik doğrulayan

Bir veritabanı içinde oluşturulmuş bir kimliğe bürünme içerik kaynakları veritabanının kapsam dışında bir kimlik doğrulayıcı veritabanı sahibi kullanarak erişmek için genişletilebilir.Bu, veritabanı sahibi, dış kaynak tarafından güvenilmelidir ve veritabanının kendisi de güvenilir olduğunu gerektirir.Ancak, bu yaklaşım, bir güvenilen bir veritabanı sahibi Hedef kapsamda AUTHENTICATE veya SUNUCU kimlik DOĞRULAMASı izinleri verilir ve arama veritabanı güvenilir olduğundan, bu veritabanında oluşturulmuş tüm Kimliğine bürünülen içerik veritabanı sahibi güvenler hedef kapsam geçerli olduğunu gösterir.

Daha parçalı BIR güven düzey gerekli olabilir.Iş gereksinimine yürütmek AS kullanarak birkaç kaynak veritabanı modüllerinde güvenme gösterir varsayalım hedef kaynak, ancak tüm kaynak veritabanı güvenme erişmek için yan tümce.Örneğin, SalesDBO emin olmak, yalnızca istemektedir.GetSalesProjections depolanmış yordamın erişemediğindenSalesStats tablosuMarketingExec Kullanıcı Herkes istemiyor, ancakPazarlama izinleri veritabanıyla kimliğine bürünMarketingExec kaynaklara erişmek içinSatış Veritabanı.Güvenme MarketingDBO ve ayarlamaPazarlama veritabanına güvenilir bu görevi gerçekleştirmek.Ilgili bir gereksinimi yerine getirmek için taneciklik için ek düzey sağlamak için güven modeli sağlar... Sertifikalar or asimetrik anahtarları Doğrulayıcı kullanılacak.Bu, imzalama adlı bir teknik yararlanır.Imzalama hakkında daha fazla bilgi için bkz: ADD SIGNATURE (Transact-SQL).

Imzalar'ı kullanma

Modül içindeki kod yalnızca modülü imzalamak için kullanılan özel anahtara erişimi olan bir kişi tarafından değiştirilebilir, imza bir modülde doğrulayın.Imzalama işleminin garanti considering, sertifika veya imza belirtilen bir asimetrik anahtar güvenebileceğinizi.Daha doğru bir şekilde veritabanı sahibi yerine asimetrik anahtar ve sertifika sahibine güvenebileceğinizi.

Imzalı modülü güvenme hedef kullanıcı AUTHENTICATE veya SUNUCU kimlik DOĞRULAMASı izin vererek yapılır kapsam sertifika ya da asimetrik anahtar eşleştirilir.

Bu yaklaşım ile sertifika güvenilir olduğu hedef kapsamda güvenilen bir sertifika kullanılarak imzalanmış bir modül içinde oluşturulan bir yürütme içeriği geçerli değil.

Örneğin, varsayalım yordamı GetSalesProjections adında bir sertifika kullanılarak imzalanmışC1.Certificate C1 içinde bulunması gerekirSatış veritabanı ve bir kullanıcı, örneğin, CertUser1 için sertifika eşlenmelidir.C1.CertUser1 AUTHENTICATE izin verilen sonraSatış veritabanıdır.

Yordam çalıştırıldığında imzalandığından, onu Viewer'in değil, emin olmak için imza doğrulanır.Modülünde yan tümcesine sahip bir AS imza, bağlama tarafından yürütmek kurulan doğrulanır, sertifika C1 , doğrulayıcı olarak.Imza doğrulandı, doğrulayıcı belirtece eklenir ve dış kaynağa erişim girişimi başarısız.

Aşağıda, kaynak veritabanı kapsam dışında kaynaklara erişimi denetlemek için imzalanmış bir modüle kullanımını göstermektedir.Yordamı GetSalesProjections in the Pazarlama veritabanı adında bir sertifika kullanılarak imzalanmışC1.Certificate C1 içinde yokSatış veritabanı ve kullanıcı CertUser için sertifika eşleştirilir.CertUser1 AUTHENTICATE izin verilirSatış veritabanıdır.

Certificate used to restrict database access

Bu kimlik doğrulayıcının güven, güven doğrulanır, veritabanı sahibi, doğrulayıcı olduğunda gibi aynı yolla doğrulanır.Diğer bir deyişle, SUNUCU kimlik DOĞRULAMASı veya AUTHENTICATE izin denetimi tarafından doğrulanır.Ancak, tek tek bir düzeyde güven ve imza değiştirmeden modülü değiştirilemez çünkü doğrulanacak TRUSTWORTHY özellik veritabanında gerek yoktur.

Bu, bunları kötü amaçlı kodu ile ilişik veritabanlarından gelen tehdidi azaltır.Saldırganın modülü karşılık gelen özel anahtar ile oturum açmak zorunda sertifika, zaten güvenilmiyor.Ancak, saldırganın, bu anahtara erişimi yok.Ayrıca, varolan bir güvenilen modülünü değiştirilmiş veya yeni bir tane oluşturulur, modülü geçerli ve güvenilir bir imzası yoktur.

Daha fazla bilgi için bkz:(Veritabanı Altyapısı) imzalama modülü.

Veritabanı kimliğe bürünme kapsam genişletme ile ilgili kurallar

, Kimliğe bürünmeyi özetlemek için kapsam aşağıdaki varsa ve yalnızca doğruysa içeriğinin bir veritabanı içinde oluşturulan diğer kapsam s uzatılabilir:

  • Hedef veritabanı sahibi veya sertifikası veya asimetrik anahtar, modül imzalamak için kullanılan doğrulayıcı güvenilen kapsam.Veritabanı sahibi, sertifika veya asimetrik anahtar ile eşleştiren anapara AUTHENTICATE veya SUNUCU kimlik DOĞRULAMASı izin vererek bunu yapabilirsiniz.

  • doğrulayıcı veritabanı sahibi, kaynak veritabanı güvenilir'olarak işaretlenmelidir.TRUSTWORTHY'DIR ayarlayarak bunun özellik veritabanı için açık.

Güven düzenek gereksinimlerinizi için seçme

Faydaları ve kısıtlamaları için veritabanı sahibi yaklaşım hem de imza yaklaşım vardır.Gereksinimleriniz için en iyi düzenek, iş gereksinimlerinizi ve iş ortamınız bağlıdır.

Veritabanı sahibi yaklaşımı

Veritabanı sahibi yaklaşım, güven oluşturmak için aşağıdaki avantajları ve dezavantajları vardır:

  • Tüm sertifika veya imza şifreleme kavramlarını anlamak gerektirmez.

  • Çok taneciklik imza dayalı yaklaşım sağlamaz.

  • Bir veritabanı örneğine ekleme SQL Server KAPALı veritabanına TRUSTWORTHY özelliğini ayarlar. Sistem yöneticiniz, açıkça TRUSTWORTHY özellik ON olarak ayarlar kadar veritabanı sahibi tarafından güvenilen bir modül geçerli olur.Bu, olası bazı araya iliştirilmiş veritabanı işlevini istediğiniz ve diğer veritabanlarına erişmek için önce sistem yöneticisi tarafından gerekli olduğunu gösterir.

Imza yaklaşımı

Imza yaklaşım, güven oluşturmak için aşağıdaki avantajları ve dezavantajları vardır:

  • Parçalı bir güven düzey sağlayabilir, ancak imzalı modül içinde gerçekleştirilen bağlam anahtarlarının uygulanır.

  • Imzayı tek başına deyimleri ile AS USER yürütmek ve yürütmek AS LOGIN kurulan bağlam anahtarlarının uygulanamaz.Bu ifadeler güven kapsamını genişletmek için veritabanı sahibi dayalı yaklaşım gerektirir.

  • Modüle özel anahtar ile oturum ancak modülleri veya veritabanını göndermeden önce özel anahtarı kaldırmak uygulamanın satıcısıyla veya geliştirici olanaklıdır.Özel anahtarlar yalnızca modülleri imzalamak için kullanılması nedeniyle, bu çalışır.Imza doğrulama amacıyla modülü ile ilişkili ortak anahtarlar büyük/küçük harf yeterlidir.

  • Bir veritabanını iliştirmek nedeniyle, imza güvenilir olan modülleri etkisi vardır.Bunlar, ek gereksinimler çalışır.