Assemblies tasarlama

Derlemeler tasarlarken göz önünde bulundurmalısınız hususların açıklanmıştır:

  • Ambalaj birleştirmeler

  • Derleme güvenliği yönetme

  • Derlemeler kısıtlamalar

Ambalaj birleştirmeler

Derleme için birden fazla işlev içerebilir SQL Serverrutin veya kendi sınıfları ve yöntemleri yazın. Çoğu zaman, özellikle bir başka olan yöntemleri çağrı sınıfları bu yordamlar paylaşıyorsanız, aynı derleme içindeki ilgili işlevleri gerçekleştiren rutinleri işlevselliğini paketlemek için mantıklı. Örneğin, ortak dil çalışma zamanı (clr) Tetikleyiciler ve clr depolanan yordamlar için veri girişi yönetim görevlerini gerçekleştirme sınıfları aynı derlemede paketlenmiş olabilir. Bunun nedeni, bu sınıfların yöntemlerini birbirleriyle daha o daha az ilgili görevler arama olasılığı daha yüksektir.

Ambalaj kodu içine montaj olduğunda, aşağıdakileri dikkate almanız gerekir:

  • clr kullanıcı tanımlı türler ve clr kullanıcı tanımlı işlevler üzerinde bağımlı dizinler Kurul bağlıdır veritabanında kalıcı veri neden olabilir. Veritabanı derleme bağlıdır kalıcı veri derleme kodunu değiştirerek sık daha karmaşıktır. Bu nedenle, üzerinde kalıcı veri bağımlılıkları (kullanıcı tanımlı türleri ve kullanıcı tanımlı işlevler kullanarak dizinler gibi) kullanan kodu gibi kalıcı veri bağımlılıkları olmayan kodundan ayrı genellikle iyidir. Daha fazla bilgi için Assemblies uygulamave alter assembly (Transact-sql).

  • Yönetilen kod parçası daha yüksek izin gerektiriyorsa, bu kodu daha yüksek izin gerektirmeyen kodu ayrı bir derlemesinden içine ayırmak daha iyidir.

Derleme güvenliği yönetme

Sen-ebilmek hakim ne kadar bir derleme tarafından korunan kaynaklara erişebilir.Tarafından yönetilen kod çalıştırıldığında net kod erişimi güvenliği. Üç izin kümesi oluşturduğunuzda veya bir derleme değiştirme belirterek, bunu: GÜVENLI, external_access veya güvenli değil.

KASA

GÜVENLİ varsayılan izin kümesi ve en kısıtlayıcı olduğunu. GÜVENLİ izinlerine sahip bir derleme tarafından çalıştırılan kod dosyaları, ağ, ortam değişkenleri veya kayıt defteri gibi dış sistem kaynaklarına erişemiyor. GÜVENLİ kod yerel veriler erişebilir SQL Serververitabanları veya hesaplamaları ve yerel veritabanı dışındaki kaynaklara erişimi içermeyen iş mantığını uygular.

Çoğu derlemeleri dışındaki kaynaklara erişmek zorunda kalmadan hesaplama ve veri yönetimi görevlerini gerçekleştirme SQL Server. Bu nedenle, derleme izin kümesi güvenli öneririz.

EXTERNAL_ACCESS

external_access derlemeleri dosyaları, ağları, Web Hizmetleri, ortam değişkenleri ve kayıt gibi bazı dış sistem kaynaklarına erişmek izin verir. Sadece SQL Serveroturumları ile dış erişim izinleri external_access derlemeleri oluşturabilirsiniz.

EXTERNAL_ACCESS ve GÜVENLI derlemeler verifiably tür-güvenli olan kodu içerebilir. Bu bu derlemeler yalnızca sınıf türü tanımı için geçerli olan iyi tanımlanmış giriş noktaları üzerinden erişebileceğiniz anlamına gelir. Bu nedenle, keyfi olarak kodun ait olmayan bellek arabellekleri erişemez. Ayrıca, sağlamlığı üzerinde olumsuz etkisi olabilecek işlemleri gerçekleştiremezsiniz SQL Serverişlem.

GÜVENSİZ

Güvenli değil, hem içindeki hem de dışındaki kaynaklara derlemeler sınırsız erişim sağlar SQL Server. Güvenli olmayan bir derleme içinde çalışan kod yönetilmeyen kod çağırabilir.

Ayrıca, unsafe belirterek kodu derleme clr doğrulayıcı tarafından türü güvenli olmadığı düşünülen işlemleri gerçekleştirmek için sağlar. Bu işlemlerin bellek arabellekleri olabilecek erişebilirsiniz SQL Serveralan kontrolsüz bir şekilde işlem. Güvenli olmayan derlemeler da potansiyel ya da güvenlik sistemi yıkmak SQL Serverya da ortak dil çalışma. GÜVENSİZ izinler yalnızca çok güvenilen derlemeler için deneyimli geliştiriciler ve yöneticiler tarafından verilmelidir. Yalnızca üyeleri sysadmin sabit sunucu rolü güvenli olmayan birleştirmeler oluşturabilirsiniz.

Derlemeler kısıtlamalar

SQL Serveryönetilen kod derlemeleri güvenilir ve ölçeklenebilir bir şekilde çalıştırabilirsiniz emin olmak için bazı kısıtlamalar koyar. Bu, Sunucu sağlamlığı tehlikeye belirli işlemleri EXTERNAL_ACCESS ve GÜVENLI derlemeler verilmez anlamına gelir.

İzin verilmeyen özel öznitelikler

Aşağıdaki özel öznitelikler içeren derlemeler açıklamalı yapamazsınız:

System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute 
System.Security.Permissions.CodeAccessSecurityAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute

System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute 
System.Security.Permissions.CodeAccessSecurityAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute

Ayrıca, EXTERNAL_ACCESS ve GÜVENLI derlemeler aşağıdaki özel öznitelikler içeren açıklamalı yapamazsınız:

System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute

System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute

İzin verilmedi.net Framework API'leri

Herhangi bir Microsoft  .NET Framework, izin verilmeyen biri ile açıklamalı API HostProtectionAttributes EXTERNAL_ACCESS ve GÜVENLI derlemeler çağrılamaz.

eSelfAffectingProcessMgmt
eSelfAffectingThreading
eSynchronization
eSharedState 
eExternalProcessMgmt
eExternalThreading
eSecurityInfrastructure
eMayLeakOnAbort
eUI

eSelfAffectingProcessMgmt
eSelfAffectingThreading
eSynchronization
eSharedState 
eExternalProcessMgmt
eExternalThreading
eSecurityInfrastructure
eMayLeakOnAbort
eUI

Desteklenen.net Framework birleştirmeler

Özel derleme tarafından başvuruda bulunulan herhangi bir derleme içine yüklenmiş olmalıdır SQL Servercreate assembly kullanılarak. Aşağıdaki .NET Frameworkderlemeler zaten yüklü içine SQL Serverve bu nedenle özel derlemeler tarafından create assembly kullanmak zorunda kalmadan başvurulabilir.

custommarshallers.dll
Microsoft.visualbasic.dll
Microsoft.visualc.dll
mscorlib.dll
system.data.dll
System.Data.SqlXml.dll
system.dll
system.security.dll
system.web.services.dll
system.xml.dll
System.Transactions
System.Data.OracleClient
System.Configuration

custommarshallers.dll
Microsoft.visualbasic.dll
Microsoft.visualc.dll
mscorlib.dll
system.data.dll
System.Data.SqlXml.dll
system.dll
system.security.dll
system.web.services.dll
system.xml.dll
System.Transactions
System.Data.OracleClient
System.Configuration

Ayrıca bkz.

Kavramlar

clr tümleştirme güvenlik

Diğer Kaynaklar

Derlemeler (veritabanı altyapısı)