Aracılığıyla paylaş


CLR barındırılan ortamı

The Microsoft .NET Framework common language runtime (CLR) is an environment that executes many modern programming languages, including Microsoft Visual C#, Microsoft Visual Basic, and Microsoft Visual C++.CLR özellikleri atık olarak toplanmış bellek, pre-emptive iş parçacığı, meta veriler Hizmetleri (yansıma türü), kod verifiability ve kod erişimi güvenliği.CLR meta veriler bulmak ve sınıflarını yüklemek, bellek durumlarda düzenleme, yöntem etkinleştirilmelerinde gidermek, yerel kodu, güvenlik uygulamak ve çalışma - ayarlamak için kullanır. saat içerik sınırları.

CLR veSQL Serverfarklı çalışma-saat belleği, iş parçacığı ve eşitleme, işleme biçimini ortamlardaBu konu, böylece tüm sistem kaynaklarını birörnek yönetilen, bu iki çalışma saatleri tümleşik biçimini açıklar.Bu konu, hangi CLR kod erişimi güvenliği (CAS) biçiminde de içerir veSQL ServerGüvenlik tümleşik bir kullanıcı kodu. yürütme güvenilir ve güvenli ortamı sağlamak

CLR mimarisi, temel kavramlar

.NET Framework, bir programcının yöntemleri ve (örneğin, alan veya sınıfının özelliklerini) yapısını tanımlayan bir sınıf uygulayan bir üst düzey dilde yazar.Bu yöntemlerden bazıları statik işlev olabilir.Derleme programın derlenmiş kodu içeren bir derleme adlı bir dosya oluştururMicrosoftara dil (MSIL) ve bağımlı derlemelerin yapılan tüm başvurular içeren bir liste

Not

Derleme CLR mimarisinin önemli bir öğesi var.Paketleme, dağıtım ve uygulama kodu içinde .NET Framework sürüm ölçü kullanılırlar.Derleme kullanarak, veritabanı içinde bir uygulama kodu dağıtmak ve yönetmek, yedeklemek için tek bir yol sağlar ve tam veritabanı uygulamaları geri yükleme yükleyebilirsiniz.

Derleme bildirimi tüm yapıları, alanlar, özellikleri, sınıflar, devralma ilişkileri, işlevleri ve programda tanımlanan yöntemleri açıklayan derleme, ilgili meta veriler içerir.Liste birleştirme kimliği oluşturur, derleme uygulama dosyaları belirtir, türleri ve kaynakları, derleme, itemizes derleme - belirtir saat bağımlı diğer derlemeler ve düzgün çalışması montaj için gereken izinler kümesi belirtir.Bu bilgiler çalışma sırasında kullanılan saat başvurularını çözmek için sürüm bağlama ilkesi uygulamak ve yüklenen derlemeleri bütünlüğünü doğrulayın.

Ek açıklama ekleme için sınıfları, özellikleri, işlevleri, .NET Framework özel öznitelikleri destekler ve ek bilgilerle uygulama yöntemleri meta veriler yakalama.Tüm .NET Framework derleyiciler yorumunu yapmadan bu açıklamaları kullanmak ve bunları derlemesinin meta veriler depolar.Bu açıklamalar, başka bir meta veriler aynı şekilde incelenebilir.

MSIL CLR, yerine işletim sistemi tarafından çalıştırılan yönetilen kodudur.Yönetilen kod uygulamaları CLR Hizmetleri, otomatik atık koleksiyon, çalışma zamanı tür denetlemesi ve güvenlik desteği alın.Bu hizmetleri yönetilen kod uygulamaları aynı platformu ve dilden bağımsız davranışını sağlamak.

Tasarım amaçları, CLR entegrasyonu

Kullanıcı kodu çalıştırır CLR barındırılan bir ortamda içindeSQL Server(Called CLR tümleştirme), aşağıdaki tasarım hedefleri uygulama:

Güvenilirlik (güvenlik)

Kullanıcı kodu verilmiyor veritabanı altyapısı işleminin bütünlüğünü tehlikeye işlemleri gerçekleştirmek için bir ileti kutusu kullanıcıdan yanıt istemeden veya işlem çıkma gibi popping.Kullanıcı kodu, veritabanı altyapısı için bellek arabellekleri veya iç veri yapıları üzerine yazmak mümkün olmamalıdır.

Ölçeklenebilirlik

SQL Server and the CLR have different internal models for scheduling and memory management.SQL Server supports a cooperative, non-preemptive threading model in which the threads voluntarily yield execution periodically, or when they are waiting on locks or I/O.CLR preemptive bir iş parçacığı modelini destekler., İçinde çalışan kullanıcı koduSQL Serversonra iyi entegre. doğrudan işletim sisteminin temel öğeler, iş parçacığı çağırabilirSQL ServerGörev Zamanlayıcı ve ölçeklenebilirliğini azalma.The CLR değil ayırt sanal ve fiziksel bellek, ancakSQL Serverfiziksel bellek doğrudan yönetir ve içinde fiziksel bellek kullanmak için gerekli yapılandırılabilir bir sınır.

Geçerli iş parçacığı işleme özelliği, zamanlama ve bellek yönetimi için farklı modelleri bir tümleştirme sınama ölçekler binlerce eşzamanlı kullanıcı oturumlarını desteklemek için bir ilişkisel veritabanı yönetim sistemi için (RDBMS).Mimarisi, ölçeklenebilirliği sistemin kullanıcı kodu ile doğrudan iş parçacığı işleme özelliği, bellek ve eşitleme ilkel uygulama programlama arabirimleri (API) çağırma tehlikeye değil emin olmalısınız.

Güvenlik

Veritabanında çalışan kullanıcı kodu gerekir izleyinSQL Serverkimlik doğrulaması ve yetkilendirme kurallarını, tablolar ve sütunlar gibi veritabanı nesnelerine erişmeBuna ek olarak, Veritabanı yöneticileri veritabanında çalışan kullanıcı kodundan işletim sistemi kaynaklarının (dosyalar ve ağ erişimi gibi erişimi denetlemek için olması gerekir.Bu API'ları gibi kaynaklara erişmek için yönetilen programlama dilleri (farklı diller yönetilmeyen Transact-SQL gibi) sağlamak gibi önemli olur.Sistem dışında makine erişimine kullanıcı kodu için güvenli bir yol sağlaması gerekirDatabase Engineişlem.Daha fazla bilgi için bkz:CLR tümleştirme güvenlik.

Performans

Çalışan yönetilen kullanıcı koduDatabase Enginebilgisayar performansı aynı koda benzer çalışması dışında.Değil hızlı yerel olarak yönetilen kullanıcı kodundan veritabanı erişimiTransact-SQL.Daha fazla bilgi için bkz:CLR tümleştirme performansı.

CLR Hizmetleri

The CLR Hizmetleri, CLR entegrasyonu ile tasarım hedefleri elde etmek için bir dizi sağlarSQL Server.

Güvenlik doğrulama türünü

Tür-güvenli kodu yalnızca iyi tanımlanmış şekillerde hizmetinin bellek yapılarını erişen bir koddur.Örneğin, geçerli nesne başvurusu verildiğinde, tür-güvenli kod gerçek alan üyelerine karşılık gelen sabit kenardan bellek erişebilirsiniz.Kod içinde veya dışında nesneye ait bellek aralık, rasgele uzaklıklar bellek erişirse, ancak daha sonra tür-güvenli değildir.Derleme CLR, MSIL için önce yüklü olduğunda yalnızca-- kullanarak derlenmekte saat (JIT) derleme, çalışma saat, tür güvenliği belirlemek için kodu inceleyen bir doğrulama aşamasını yapar.Bu doğrulama başarıyla geçen kod verifiably tür-güvenli kod denir.

Uygulama etki alanları

CLR, burada yönetilen kod derlemeleri yüklenen yürütülen ve ana bilgisayar işlemi yürütme bölgeleri olarak uygulama etki alanlarını kavramı destekler.Uygulama etki alanı sınırları derlemeleri arasında yalıtım sağlar.Statik değişkenler ve veri üyeleri ve dinamik kod arama yeteneği açısından görünürlüğünü yalıtılmış derlemeleri var.Uygulama etki alanlarının yüklenmesi ve kod kaldırma mekanizması da var.Yalnızca uygulama etki alanı kaldırma kodu bellekten olabilir.Daha fazla bilgi için bkz:Uygulama etki alanları ve CLR tümleştirme güvenlik.

kod erişimi güvenliği (CAS)

CLR güvenlik sistemi, ne tür bir yönetilen kod koduna izin atayarak gerçekleştirebileceği denetlemek için bir yol sağlar.Kod erişim izinlerini (örneğin, derleme imza) veya kod kaynağını kod kimliğini dayalı olarak atanır.

CLR bilgisayarın yönetici tarafından ayarlanan bir bilgisayar çapındaki ilke sağlar.Bu ilke, izin verir makinede çalışan tüm yönetilen kodun tanımlar.Ayrıca, olduğu gibi ana bilgisayarlar tarafından kullanılabilecek bir ana bilgisayar düzeyinde güvenlik ilkesiSQL Serveriçin ek kısıtlamalar yönetilen kod.

Kod erişim izni tarafından korunan kaynak s işlemleri yönetilen bir .NET Framework API sunar, API erişmeden önce izin talep kaynak.Bu isteğe bağlı her birimi kodu (derleme) çağırma yığınındaki kapsamlı kontrol tetiklemek CLR güvenlik sistemi neden olur.Zincirdeki tüm arama izni varsa, kaynağa erişim verilir.

Unutmayın, yeteneği oluşturmak için yönetilen kod dinamik olarak kullanarak, Reflection.Emit API desteklenmiyor CLR barındırılan bir ortamda içindeSQL Server.Bu kod, CAS çalıştırma izniniz olması ve bu nedenle, çalışma zamanında başarısız olur.Daha fazla bilgi için bkz:CLR tümleştirme kod erişimi güvenliği.

Ana bilgisayar koruma özellikleri (HPAs)

CLR API, .NET Framework, CLR ana ilgilendirebilecek belirli özelliklere sahip bir parçası olan ek açıklama eklemek için bir mekanizma yönetilen sağlar.Bu tür öznitelik örnekleri şunlardır:

  • API oluşturmak veya paylaşılan durum (örneğin, statik sınıf alanları) yönetme olanağı sunar olup olmadığını gösteren SharedState.

  • Eşitleme API iş parçacıklarını eşitleme yeteneğine gösterir olup olmadığını gösterir.

  • ExternalProcessMgmt API ana bilgisayar işlemi denetlemek için bir yol sunar olup olmadığını gösterir.

Bu öznitelikler olduğunda, ana bilgisayar listesini HPAs, SharedState özniteliği, barındırılan bir ortamda izin gibi belirleyebilirsiniz.Bu durumda, CLR tarafından yasaklanmış listesinde HPAs tarafından ek açıklama API'lerini çağırmak için kullanıcı kodu girişimlerini engeller.Daha fazla bilgi için bkz:Ana bilgisayar koruması öznitelikleri ve CLR tümleştirme programlama.

SQL Server ve CLR birlikte nasıl işler

Bu bölümde ele alınmaktadır nasılSQL Serverİş, iş planlama çizelgeleme, eşitleme ve bellek yönetimi modellerini birleştirirSQL ServerCLR.In particular, this section examines the integration in light of scalability, reliability, and security goals.SQL Server essentially acts as the operating system for the CLR when it is hosted inside SQL Server.The CLR aramaları düşük düzeyli yordamlar tarafından uygulananSQL Serveriş parçacığı, iş planlama çizelgeleme, eşitleme ve bellek yönetimi.Bunlar aynı ilkel, geri kalanıSQL Serveralt yapısını kullanır.Bu yaklaşım, ölçeklenebilirlik, güvenilirlik ve güvenlik birçok yarar sağlar.

Ölçeklenebilirlik: Ortak iş parçacığı, zamanlama ve eşitleme

CLR çağrılarıSQL ServerAPI oluşturma iş parçacıklarını her çalışan kullanıcı kodu ve kendi iç.İçin birden çok iş parçacığı, CLR çağrıları arasında eşitlemeSQL Servereşitleme nesnesi.BöyleceSQL ServerZamanlayıcı, bir iş parçacığı eşitleme nesnesi. bekleyen diğer görevleri zamanlamak içinÖrneğin, CLR atık koleksiyon başlattığında, tüm iş parçacıklarını tamamlamak atık koleksiyon için bekleyin.CLR iş parçacıkları ve bunlar bekleyen eşitleme nesneleri denir çünküSQL ServerÇizelgeleyici,SQL Serverdiğer veritabanı görevleri ilgili olmayan çalışan iş parçacığı zamanlamak CLR.Bu da sağlarSQL Serveralgılamak kilitlenmeler, ilgili kilitleri alınan CLR eşitleme nesneleri ve employ geleneksel teknikleri çıkmaz kaldırma.

Yönetilen kod çalışır, preemptivelySQL Server.The SQL Server scheduler has the ability to detect and stop threads that have not yielded for a significant amount of time.CLR iş parçacığı için takma özelliğiSQL Serveriş parçacıklarını gösterirSQL ServerZamanlayıcı CLR "kaçan" iş parçacığı tanımlama ve yönetme, önceliği.Kaçan bu iş parçacığı askıya alındı ve yeniden sıraya koyun.Sürekli kaçan iş parçacıkları tanımlanan bir iş parçacığı yürütülen diğer çalışanlara çalıştırabilmeniz için belirli bir saat boyunca çalışmasına izin verilmez.

Not

Veriye erişen veya tetikleyici atık koleksiyon için yeterli bellek ayırır uzun süre çalıştırılan yönetilen kod otomatik olarak verim.Olmayan verilere veya yönetilen yeterli bellek atık koleksiyon tetiklemek için uzun süre çalıştırılan yönetilen kod açıkça .NET Framework'ün System.iş parçacığı.uykuya geçirmek() işlevini çağırarak yol.

Ölçeklenebilirlik: Ortak bellek yönetimi

The CLR çağrılarıSQL Serverilkel ayırma ve de-allocating, bellek.Because the memory used by the CLR is accounted for in the total memory usage of the system, SQL Server can stay within its configured memory limits and ensure the CLR and SQL Server are not competing with each other for memory.SQL Server can also reject CLR memory requests when system memory is constrained, and ask CLR to reduce its memory use when other tasks need memory.

Güvenilirlik: Uygulama etki alanları ve kurtarılamayan özel

Önemli özel durum, yetersiz bellek veya yığın taşması gibi .NET Framework API'ları, yönetilen kod ile karşılaştığında, her zaman bu tür hatalardan kurtarmak ve tutarlı ve doğru mantığı, uygulama için sağlamak mümkün değildir.Bu API artırma bir iş parçacığı özel yanıt bu hatalar olarak durdurur.

Zaman içinde bulunanSQL Server, bu iş parçacığı iptalleri gibi ele alınır: CLR uygulamanın tüm paylaşılan durum algılar etki alanı iş parçacığı iptal oluştuğu. CLR eşitleme nesnesi olup olmadığını kontrol ederek yapar.Uygulama etki alanındaki paylaşılan durum ise, uygulama etki kaldırılır.Uygulama etki alanı kaldırma, uygulama etki alanında çalışmakta olan veritabanı işlemleri durdurur.Paylaşılan durum varlığı gibi önemli özel durumlar dışında özel durum, uyarının harekete geçirilmesine karşılık kullanıcı oturumlarını etkisini genişletmek içinSQL ServerCLR adımları olasılığını azaltmak için alınmış ve paylaşılan durumu.Daha fazla bilgi için .NET Framework belgelerine bakın.

Güvenlik: İzin ayarlar

SQL Server veritabanına dağıtılmış kod güvenilirlik ve güvenlik gereksinimlerini belirlemek kullanıcılara izin verir.Derleme veritabanına karşıya derlemenin yazar üç izin kümesinden Bu derleme için belirtebilirsiniz: GÜVENLİ, EXTERNAL_ACCESS ve UNSAFE.

İzin kümesi

GÜVENLİ

PERMİSSİON_SET

GÜVENLİ OLMAYAN

kod erişimi güvenliği

Yalnızca yürütmek

yürütmek + dış kaynaklara erişim

UNRESTRICTED

Programlama modeli kısıtlamaları

Evet

Evet

Herhangi bir kısıtlama

Verifiability gereksinim

Evet

Evet

Hayır

Yerel kod arama yeteneği

Hayır

Hayır

Evet

En güvenilir ve güvenli mod ile ilgili kısıtlamalar izin verilen bir programlama modeli açısından güvenli olur.Güvenli derlemeler çalıştırmak, hesaplamaları gerçekleştirmek ve yerel veritabanı erişimi için yeterli izni verilir.Güvenli derlemeler olarak verifiably yazmak gereken güvenli ve yönetimsiz kod çağırmak için izin verilmez.

Veritabanı yöneticileri tarafından oluşturulabilen son derece güvenilir kod UNSAFE içindir.Bu güvenilen kod kod erişimi güvenlik kısıtlamaları vardır ve bu (yerel) yönetimsiz kod çağırabilir.

EXTERNAL_ACCESS bir ara güvenlik seçeneği veritabanının harici kaynaklara kodunu vererek sağlar, ancak hala sahip güvenilirliği garanti güvenli.

SQL Serverana bilgisayar düzeyinde CAS ilke katmanı, üç birini ayarlar saklanan küme izni'ne göre izin veren bir ana ilke ayarlamak için kullanır.SQL Serverkatalog.Yönetilen kod her zaman veritabanı içinde çalışan kod bu erişim izni kümelerinden birini alır.

Programlama modeli kısıtlamaları

Yönetilen kod programlama modeliniSQL Serverilgili yazı işlevler ve yordamlar, türleri, genellikle isteme kullanılması durumunda tutulan birden çok etkinleştirilmelerinde veya paylaşım durumu üzerinde birden çok kullanıcı oturumları.Ayrıca, daha önce açıklandığı gibi paylaşılan durum varlığını ölçeklenebilirliği ve uygulamanın güvenilirliğini etkileyen önemli özel durum neden olabilir.

Verilen bu konuları biz engelleyin statik değişkenler ve statik veri üyeleri sınıflar kullanılırSQL Server.İçin güvenli ve EXTERNAL_ACCESS birleştirmeleri,SQL Serverderleme saat CREATE ASSEMBLY meta veriler inceler ve bu derlemeleri, statik veri üyeleri ve değişkenleri bulduğu oluşturulması başarısız

SQL Serverile ek açıklama, .NET Framework API çağrıları da izin vermiyorSharedState,SynchronizationveExternalProcessMgmtana bilgisayar koruma öznitelikleri.Bu güvenli engeller ve eşitlemesi gerçekleştiriliyor ve bütünlüğünü etkileyen bir API, çağıran tarafından EXTERNAL_ACCESS birleştirmeleri etkinleştirme paylaşma durumu,SQL Serverişlem.Daha fazla bilgi için bkz:CLR tümleştirme programlama modeli kısıtlamaları.