execute as kullanarak veritabanı kimliğe bürünme genişletme
SQL Serverbaşka asıl tek başına execute as kullanarak açıkça taklit yeteneğini destekler deyim, veya örtülü olarak execute as kullanarak modülleri üzerinde yan tümce tümce tümce.Tek başına execute as deyim execute as LOGIN kullanarak sunucu düzeyinde sorumluları veya oturumları kimliğine bürünmek için kullanılan deyim.Tek başına execute as deyimini de veritabanı kimliğine bürünmek için kullanılan düzey sorumluları veya execute as user deyim kullanarak kullanıcıları.
yan tümce tümce modülleri üzerinde taklit gibi belirtilen kullanıcı veya oturum açma veritabanı veya sunucu yürütme gerçekleştirilen örtülü impersonations düzey.Bu kimliğe bürünme modülü bir saklı yordam veya işlev veya sunucu düzeyinde tetikleyici gibi bir sunucu düzeyinde modülü gibi bir veritabanı düzey modülü olmasına bağlıdır.
Kimliğe bürünme kapsamını anlama
Bir sorumlusunun execute as LOGIN kullanarak belirlerken deyim, ya da yan tümce tümce tümce, kimliğe bürünme kapsamını Sunucu çapında olduğu gibi execute kullanarak sunucu kapsam bir modül içinde.İçerik anahtarından sonra yani tüm kaynak kimliğine bürünülen oturum açma izinlerine sahip olmasını sunucu içinde erişilebilir.
Ancak, bir patron veritabanı kapsam bir modül içinde veya execute as user deyim kullanarak yan tümce tümce tümce, kimliğe bürünme kapsamını veritabanı için varsayılan olarak Yasak olduğu gibi execute kullanarak belirlerken.Yani, veritabanının kapsam dışında kalan nesnelere başvurular bir hata döndürecektir.Bu varsayılan davranışın nedenini anlamak için aşağıdaki senaryoyu düşünün.
O veritabanındaki tüm haklara sahip olmasıyla sırasında bir veritabanı sahibi veritabanı kapsam dışında herhangi bir izin yok mümkündür.Bu nedenle, SQL Server değil izin vermek, taklit, veritabanı sahibi veya başkasının taklit, başka bir kullanıcı için geçerli izinlerini kapsam dışında kalan kaynaklara erişim olanağı vermekveritabanı sahibi.
Örneğin, iki veritabanı barındırma ortamında düşünün ve her veritabanı sahibi olan ayrı bir varlık ait.Database1 is owned by Bob and Database2 is owned by Fred.Ne Barış, ne de Fred ilgili veritabanlarının içinde 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 uygulanan güvenlik kısıtlamaları nedeniyle, SQL Server, Bob altında Gamze'nın veritabanı erişimkimliğine bürünülen bağlam. Bir yerde bu varsayılan kısıtlamaları Bob kendi bilgi olmadan Fred'ın veri erişim olanağına sahip olacaktır.Bu nedenle, kapsam veritabanı düzey impersonations varsayılan olarak veritabanı tarafından sınırlıdır.
Ancak, bunu olabilir yararlı seçerek belirli senaryolarda uzatma kapsam veritabanı ötesinde kimliğe bürünme.Örneğin, bu durum iki veritabanını kullanır ve başka bir veritabanından bir veritabanına erişim gerektiren bir uygulama olacaktır.
Adlı bir saklı yordamı çağıran bir pazarlama uygulaması durum göz önünde GetSalesProjections , Pazarlama veritabanı ve saklı yordam içinde tanımlanan bir yürütme bağlam değiştirme vardır.Saklı yordam çağrıları içine Satış satış bilgilerini almak için veritabanının SalesStats tablo.O veritabanı dışında bir veritabanı içinde kurulan bir yürütme içeriği geçersiz olduğundan varsayılan olarak, bu senaryo, işe yaramaz.Ancak, pazarlama uygulama geliştiricilerin doğrudan erişim sağlamak için pazarlama uygulamanın kullanıcılarından oluşan istemiyor, Satış veritabanı veya içindeki tüm nesneler üzerinde izinlere sahip.execute as kullanmak için ideal çözüm olurdu yan tümce tümce tümcesinde, gerekli izinlere sahip bir kullanıcı kimliğine bürünmek için saklı yordam Satış veritabanı.Ancak, bu varsayılan kısıtlamaları şu anda yerinde engel.Bu nedenle, geliştiriciler bu sorunu nasıl çözebilirsiniz sorudur.
De SQL Server, seçmeli olarak genişletebilirsiniz kapsam arasında iki veritabanları. güven modeli oluşturarak veritabanı içinde kurulan veritabanı kimliğe bürünmeAncak, bu güven modeli açıklayan önce ve nasıl kapsam , kimliğe bürünme seçmeli olarak genişletilmesi, kimlik doğrulaması ve doğrulayıcı rolünü anlamanız gerekir SQL Server.
Doğrulayıcı anlama
Kimlik doğrulaması ise işlem tarafından hangi belirli bir asıl kurar ve bir sisteme kendi kimliğini kanıtlar.Bir kimlik doğrulayıcıdır bir varlık , kimlik doğrulaması veya belirli bir asıl Özgünlük belgesi, taşıyıcısının onaylamak üzere.Örneğin, ne zaman bir bağlantı yapılan için SQL Server, o bağlantı için oluşturulan oturum açma kimlik örnek tarafından SQL Server.
Düşünün, bir kullanıcının açıkça geçer içerik sunucu-execute as oturum kullanarak düzeyinde büyük/küçük harf deyim.Bu kimliğe bürünme izinlerini gerektirir düzey.Bu izinler arayan execute as oturum açma izni grantee izin deyim, her yerde örneği içinde belirtilen oturum açma taklit etme becerisi SQL Server.Gerçekte, act, günlük, kimliğine bürünülen oturumu olarak taklit etmek arayan deyim verir.Server - sahibidüzey izin kapsam sysadmin örneğinin sahibi olan SQL Server.Bu durumda, sunucu -düzey , kimliğe bürünme kimlik doğrulayıcı sysadmin veya örneğini SQL Server kendi.
Bununla birlikte, göz önünde durum hangi bağlamda, bir execute as user deyim veya execute as nedeniyle kurulmuş yan tümce tümce tümce veritabanı kapsamlı bir modülde.Bu gibi durumlarda, veritabanının kapsam içinde kimliğe bürünme izinleri denetlenir.Sahibi olduğu veritabanının kendisi, kullanıcıların özelliklerini Al izinleri kapsam için varsayılandır dbo.Ayrıca, bu impersonations, veritabanı sahibi doğrulayıcı.Ayrıca, bu, gerçekte, kimliğine bürünülen kullanıcının kimliğini kurar ve gerçekliği için taşıyıcısının onaylamak üzere veritabanı sahibi olur.Kimliğine bürünülen içerik veritabanı sahibi tam veritabanı sahibi olduğundan, o belirli veritabanı içinde her yerde gerçek kabul edilir.Ancak, bu veritabanı kimliğine bürünülen içeriği geçerli değil.
Doğrulayıcı nasıl kullanılır?
Doğrulayıcı kurulmuş bir içerik belirli bir kapsam içinde geçerli olup olmadığını belirlemek için kullanılır.Genelde, Sistem Yöneticisi (sa) doğrulayıcı veya örnek , SQL Server, veya veritabanları, dbo.Etkili bir şekilde belirli kullanıcı veya oturum açma için bağlam içinde kurulmuş kapsam sahibi doğrulayıcı.Bu kimlik doğrulayıcı bilgileri oturum açma ve kullanıcı için tutulan belirteç bilgileri içinde yakalanan ve üzerinden görülebilir sys.user_token ve sys.login_token görünümler.Daha fazla bilgi için bkz: Yürütme içeriği anlama.
Not
Simge görünümü içinde hiçbir doğrulayıcı bilgi verilir, doğrulayıcının ise örnek , SQL Server.Bu içerik yok ise doğrudur kimliğe bürünme, sunucu olup olmadığını veya geçiş düzey.
Kapsam sahibi kendi kimlik doğrulayıcı olarak sahip bir yürütme içeriği, kapsamı geçerlidir.Kapsam, örneğin, bir veritabanı sahibi örtülü olarak kapsamı içinde tüm varlıklar tarafından güvenilen olmasıdır.İçerik de diğer kapsamlar arasında diğer veritabanlarını veya örnek geçerli olduğu SQL Server kendisi, doğrulayıcı Güvenilir.Bu nedenle, kimliğine bürünülen kullanıcı bağlamı dışında veritabanı kapsam geçerliliği Doğrulayıcı içerik için hedef kapsamı içinde güvenilir olmasına bağlıdır.Hedef kapsam ise başka bir veritabanında hedef kapsam ise doğrulayıcı kimlik doğrulama izni veya sunucu kimlik doğrulaması izni vererek bu güven kurulduğunda bir örnek , SQL Server.
Kimliğe bürünme kapsamını genişletme
Bir veritabanına içinden bir kimliğe bürünme kapsamını genişletmek için bir hedef kapsamı, başka bir veritabanı veya örnek gibi SQL Server, aşağıdaki koşullar met. olması gerekir
Hedef kimlik doğrulayıcısı güvenilecek kapsam.
kaynak veritabanı güvenilir olarak işaretlenmesi gerekir.
Kimlik Doğrulayıcı güvenme
Önceki kullanarak Satış ve Pazarlama veritabanlarını örneği aşağıda gösterilmiştir saklı yordam GetSalesProjections , Pazarlama verilere erişme veritabanı SalesStats , tablo Satış veritabanı.Saklı yordam yan tümce tümce tümce içerir execute as kullanıcı MarketingExec.Sahibi Satış veritabanı SalesDBO ve sahibi Pazarlama veritabanı MarketingDBO.
Zaman GetSalesProjections saklı yordamı yürütme kullanıcı tarafından çağrıldığında, yan tümce tümce tümce arayan kullanıcı için saklı yordam yürütme bağlamında örtülü olarak geçer gibi MarketingExec kullanıcı.Bu bağlam için kimlik doğrulayıcı MarketingDBO, sahibini Pazarlama veritabanı.Varsayılan olarak, bu yordam içinde herhangi bir kaynağa erişmek Pazarlama veritabanı MarketingExec kullanıcının erişmesine izin verilir.Ancak, bir tablo erişmek için Satış veritabanı, Satış veritabanı gerekir güven doğrulayıcı MarketingDBO.
Bir kullanıcı oluşturarak bunu yapabilirsiniz Satış adlı bir veritabanı MarketingDBO , eşler için MarketingDBO oturum açma adı ve daha sonra bu kullanıcı kimlik doğrulama izni verme Satış veritabanı.Sonuç olarak, bu izni, kimlik doğrulayıcı olarak grantee olan herhangi bir yürütme içeriği veritabanı içinde geçerlidir.Çünkü Doğrulayıcı MarketingDBO kimlik doğrulama izni de Satış veritabanı kullanıcı bağlamı MarketingExec execute as tarafından kurulan yan tümce tümce tümcesinde GetSalesProjections saklı yordam , Pazarlama veritabanı güvenilir olarak Satış veritabanı.
Bu örnek genişletme gösterir iken kapsam dış bir veritabanında bir nesneye erişimine izin verecek şekilde temsil edilmesine, ayrıca genişletmek mümkündür kapsam örneği için kimliğe bürünme SQL Server.Yordam olan server - bir oturum oluşturmak için örneğin,düzey bir sunucu genelindeki izin gerektiren eylem sunucu kimlik doğrulaması izniniz Bağlam Kimliği Doğrulayıcı için verilecek.Bu anlam vardır grantee, kimlik doğrulayıcı olarak sunucu kimlik doğrulaması izni olan içeriği tam örnek arasında güvenilen SQL Server**,** içerik örneğine kaydediliyordu gibi SQL Server doğrudan.
Veritabanına güvenme
De SQL Server, ek güvenlik ve uzatma işlemi için taneciklik sağlamak için bir adım daha güven modeli gider kapsam veritabanı düzeyinde kimliğe bürünme.Kimlik doğrulama izni hedef kapsam için bir yol olarak bir içerik Doğrulayıcı güvenmek için kullanabilirsiniz, ancak de belirleyebilirsiniz olup olmadığını örnek , SQL Server kaynak veritabanı ve içeriği içinde it. güvenir.
Bunu göstermek için kabul MarketingDBO adlı başka bir veritabanı asıl sahibi konferans.Ayrıca, kabul MarketingDBO içinde belirtilen yürütme içeriği istediği Pazarlama kaynaklara erişim sağlamak için veritabanı Satış veritabanı.Ancak, bunun içinde kurulan bağlamları istemediği konferans herhangi bir erişim sağlamak için veritabanı Satış veritabanı.
Bu gereksinim elde etmek için içinde bir kimliğe bürünme içerik veritabanı dışındaki kaynaklara erişmek için kullanılır modülü içeren veritabanını güvenilir olarak işaretlenmelidir.GÜVENİLİR özellik gösterir olup olmadığını örnek , SQL Server veritabanı ve içeriği içinde it. güvenir.GÜVENİLİR özellik iki amaca hizmet eder:
Ekli veritabanları geliyor tehdidi azaltır örnek , SQL Server ve potansiyel içerebilir kötü amaçlı modülleri tanımlı yürütmek bağlamında bir yüksek ayrıcalık kullanıcı.
Bu bağlı veritabanları varsayılan olarak güvenilir işaretlenmemiş olmasını sağlayarak gerçekleştirilir.Ayrıca, kötü niyetli olabilecek modüller aracılığıyla veritabanı dışındaki kaynaklara erişimi veritabanı güvenilir işaretlenmesi gerekir sağlayarak gerçekleştirilir.Bir veritabanında güvenilir özellik ayarlama kısıtlandığında, üyelerine sysadmin sabit sunucu rolü.
Yöneticinin, örnek , SQL Server veritabanları, verilir dış kaynaklar ve olanlar gerekir ne zaman veritabanlarına sahip değil aynı erişim arasında ayırt etmek için sahibi ve o sahibi, güvenilir bazı kapsam kimlik doğrulayıcı olarak
Bu davranış kullanarak kontrol edilebilir Güvenilir özellik.Örneğin, bir veritabanından veritabanı 1, kimliğine bürünülen bağlamları olması gereken yerde güvenilen başka bir veritabanından veritabanı 2 içerikleri güvenilir olmamalıdır ve her ikisi de hedef kimlik doğrulayıcı olarak güvenilir olan sahibi aynı olan bir durum olduğunu varsayalım kapsam.GÜVENİLİR özellik olabilir küme için açık database1 ve küme için off için database2 emin olmak için modüllerde veritabanı 2 bu veritabanı dışındaki kaynaklara erişemez.
Aşağıda kaynaklara erişimi denetlemek için güvenilir veritabanı özelliğinin kullanımı gösterilmiştir kapsam kaynak veritabanı.MarketingDBO kimlik doğrulama izni de Satış veritabanı ve her ikisi de sahibi olduğu Pazarlama ve konferans veritabanları.The GetSalesProjections stored procedure in the Marketing database can successfully access the Sales database, because it meets the two security requirements: Doğrulayıcı, MarketingDBO, hedef kapsam ve kaynak veritabanı güvenilir Pazarlama, güvenilirdir.Erişmeyi dener Satış gelen veritabanı konferans veritabanı reddedildi, çünkü tek bir gereklilik yerine: Doğrulayıcı, MarketingDBO, hedef güvenilir kapsam.
Her girişimi yapılan erişmek için bir kaynak örneği bir kimliğine bürünülen bağlamı kullanarak veritabanının kapsam dışında kalan SQL Server gelen İsteğin kaynaklandığı veritabanının güvenilir ve doğrulayıcı güvenilir olduğunu doğrular.
Sertifikaları ve asimetrik anahtarları Doğrulayıcı olarak
Bir veritabanı içinde kurulan bir kimliğe bürünme içerik veritabanı sahibi kimlik doğrulayıcı kullanarak veritabanının kapsam dışında kalan kaynaklara erişmek için uzatılabilir.Bu veritabanı sahibi dış kaynak tarafından güvenilir ve veritabanı da güvenilir olduğunu gerektirir.Ancak, bu yaklaşım güvenilir veritabanı sahibi kimlik doğrulama veya sunucu kimlik doğrulaması hedef kapsamda izinlerine sahiptir ve arama veritabanı güvenilir olduğundan, kimliğine bürünülen hiçbir bağlamda kurulan bu veritabanındaki veritabanı sahibi güvendiği hedef kapsam geçerli olup olmadığını gösterir.
Daha çok parçalı bir güven düzey gerekli olabilir.İş gereksinimi birkaç modüllerdeki güvenerek gösterir varsayalım kaynak veritabanı execute as kullanarak hedef kaynak, ancak bütün güvenmek değil erişmek için yan tümce tümce kaynak veritabanı.Örneğin, varsayalım SalesDBO emin olmak istemektedir, tek GetSalesProjections saklı yordam erişmek SalesStats olarak tablo MarketingExec kullanıcı, Herkes istemediği ancak Pazarlama ile veritabanı üzerinde izinleri taklit MarketingExec kaynaklara erişmek için Satış veritabanı.Güvenen MarketingDBO ve ayar Pazarlama veritabanı için güvenilir değil bu görevi başarmak.taneciklik bu gereksinimi yerine getirmek için ek düzey sağlamak için güven modeli sağlar Sertifikalar veya asimetrik anahtarlar Doğrulayıcı kullanılacak.Bu imzalama adı verilen bir teknik yararlanır.İmzalama hakkında daha fazla bilgi için bkz: İMZA (Transact-sql) Ekle.
İmza kullanma
Bir modülde imzaları doğrulamak bir modül içindeki kod yalnızca özel erişimi olan bir kişi tarafından değiştirilebilir olduğunu anahtar modülü imzalamak için kullanılır.Garanti imzalama işleminin sertifika veya asimetrik anahtar İmzada belirtilen güvenebilirsiniz.Daha doğru bir şekilde, sertifika veya veritabanı sahibi yerine asimetrik anahtar sahibi güvenebilirsiniz.
İmzalı modülü güvenen değiştirilerek hedef kullanıcı kimlik doğrulama veya sunucu kimlik doğrulaması izni vererek kapsam sertifika veya asimetrik anahtar eşlenen.
Bu yaklaşıma göre güvenilen bir sertifika kullanılarak imzalanmış bir modül içinde kurulan bir yürütme içeriği sertifika güvenilen hedef kapsam içinde geçerlidir.
Örneğin, varsayalım yordam GetSalesProjections adında bir sertifika kullanılarak imzalanmış C1.Sertifika C1 bulunması gereken Satış veritabanı ve bir kullanıcı CertUser1, eşlenmelidir sertifikasına C1.CertUser1 sonra kimlik doğrulama izinleri verilir Satış veritabanı.
Yordam çalıştırıldığında, imzalandıktan sonra onu kurcalanmadığından emin emin olmak için kendi imza doğrulanır.yan tümce tümce tümcesinde modülü sahip olduğu imza, içeriği yürütme tarafından kurulan doğrulanır, sertifika C1 , kimlik doğrulayıcı olarak.İmza doğrulanır, doğrulayıcı belirteci ve dış kaynak başarısız erişim girişiminde eklenir.
kaynak veritabanı kapsam dışında kalan kaynaklara erişimi denetlemek için imzalanmış bir modülün kullanımı aşağıda gösterilmiştir.Yordam GetSalesProjections , Pazarlama veritabanı adında bir sertifika kullanılarak imzalanmış C1.Sertifika C1 de var, Satış veritabanı ve kullanıcı CertUser sertifikayla eşleştirilmiş.CertUser1 kimlik doğrulama izni de Satış veritabanı.
Veritabanı sahibi doğrulayıcı olduğunda güven doğrulandı olarak bu doğrulayıcı güven aynı şekilde doğrulanır.Diğer bir deyişle, kimlik doğrulama sunucusu veya kimlik doğrulama izni denetimi tarafından doğrulanır.Ancak, güven, parçalı bir sağlanır çünkü düzey ve modül imza değiştirmeden değiştirilemez, doğrulanacak veritabanı güvenilir özellik için gerek yoktur.
Bu, onlara kötü amaçlı kodu ile ekli veritabanlarından gelen tehdidi azaltır.Saldırgan modülü ile özel imzalamak zorunda anahtar zaten var olan güvenilen sertifika karşılık gelir.Ancak, saldırgan bu erişimi yok anahtar.Ayrıca, varolan güvenilir 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ını genişletmek için kurallar
Özetlemek için kimliğe bürünme kapsam bir veritabanı içinde kurulan içeriğinin diğer uzatılabilir kapsams aşağıdaki varsa ve yalnızca doğruysa:
Hedef veritabanı sahibi veya bir sertifika veya asimetrik anahtar modül imzalamak için kullanılan kimlik doğrulayıcısı güvenilecek kapsam.Bu, veritabanı sahibi, bir sertifika veya asimetrik anahtar eşlenen asıl kimlik doğrulama veya kimlik doğrulama sunucusu izinlerini vererek yapabilirsiniz.
Kimlik Doğrulayıcı veritabanı sahibi ise, kaynak veritabanı güvenilir olarak işaretlenmesi gerekir.trustworthy ayarlayarak bunu yapabilirsiniz özellik veritabanı için açık.
Güven mekanizması gereksinimleriniz için seçme
Avantajları ve dezavantajları hem veritabanı sahibi yaklaşım, hem de imza yaklaşım vardır.Gereksinimlerinizi en iyi mekanizması iş gereksinimlerinize ve iş ortamınıza bağlıdır.
Veritabanı sahibi yaklaşımı
Güven kurulması için veritabanı sahibi yaklaşım, aşağıdaki avantajları ve dezavantajları vardır:
Hiçbir sertifika veya imza gibi şifreleme kavramlarını anlamak gerektirmez.
Çok taneciklik imza tabanlı bir yaklaşım sağlamaz.
Bir veritabanına iliştirerek bir örnek , SQL Server aygıtlarım için veritabanı güvenilir özellik ayarlarSistem Yöneticisi açıkça trustworthy ayarlar kadar modülleri veritabanı sahibi tarafından güvenilen geçerli olmayacak özellik açık.Bu büyük olasılıkla Sistem Yöneticisi tarafından eklenen veritabanı önce gerekli bazı araya olduğunu gösterir işlev istediğiniz ve diğer veritabanlarına erişim.
İmza yaklaşımı
Güven kurulması için imza yaklaşım, aşağıdaki avantajları ve dezavantajları vardır:
Parçalı bir güven düzey sağlayabilir, ancak imzalı modülleri içinde gerçekleştirilen bağlam anahtarları için geçerlidir.
İmza tek başına deyimler execute as kullanıcı ve execute as LOGIN kurulmuş içerik geçişi için uygulanamaz.Bu ifadeler genişletmek için veritabanı sahibi dayalı bir yaklaşım gerektiren kapsam güven.
Uygulama satıcınıza veya geliştirici modülü ile birlikte özel bir anahtarı imzalamak, ancak özel anahtar modülleri veya veritabanı göndermeden önce kaldırmak için mümkündür.Bu çalışır çünkü özel anahtarlar yalnızca modülleri imzalamak için kullanılır.İmza doğrulama amacıyla modülü ile ilgili ortak anahtarları yeterlidir.
Bir veritabanını iliştirmek imzalarının nedeniyle güvenilir modüller üzerinde hiçbir etkisi yoktur.Bunlar ek gereksinimler çalışır.
Ayrıca bkz.