Aracılığıyla paylaş


Design assemblies

Applies to:SQL Server

Bu makalede, derlemeleri tasarlarken göz önünde bulundurmanız gereken aşağıdaki faktörler açıklanmaktadır:

  • Packaging assemblies
  • Derleme güvenliğini yönetme
  • Derlemeler üzerindeki kısıtlamalar

Package assemblies

Derleme, sınıflarında ve yöntemlerinde birden fazla SQL Server yordamı veya türü için işlevsellik içerebilir. Çoğu zaman, özellikle bu yordamlar yöntemleri birbirine çağrı yapan sınıfları paylaşıyorsa, aynı derleme içinde ilgili işlevleri gerçekleştiren yordamların işlevselliğini paketlemek mantıklıdır. Örneğin, ortak dil çalışma zamanı (CLR) tetikleyicileri ve CLR saklı yordamları için veri girişi yönetim görevlerini gerçekleştiren sınıflar aynı derlemede paketlenebilir. Bunun nedeni, bu sınıfların yöntemlerinin birbiriyle daha az ilişkili görevlerin yöntemleri yerine birbirini çağırma olasılığının daha yüksek olmasıdır.

Kodu derleme olarak paketlerken şunları göz önünde bulundurun:

  • CLR kullanıcı tanımlı işlevlerine bağlı CLR kullanıcı tanımlı türler ve dizinler, kalıcı verilerin derlemeye bağlı veritabanında yer alabilmesine neden olabilir. Veritabanındaki derlemeye bağlı kalıcı veriler olduğunda derlemenin kodunu değiştirmek genellikle daha karmaşıktır. Bu nedenle, kalıcı veri bağımlılıklarının kullandığı kodu (kullanıcı tanımlı işlevleri kullanan kullanıcı tanımlı türler ve dizinler gibi) bu kalıcı veri bağımlılıklarına sahip olmayan koddan ayırmak daha iyidir. For more information, see Implement assemblies and ALTER ASSEMBLY.

  • Yönetilen kodun bir parçası daha yüksek izin gerektiriyorsa, bu kodu daha yüksek izin gerektirmeyen koddan ayrı bir derlemeye ayırmak daha iyidir.

Kod erişim güvenliği artık desteklenmiyor

CLR, artık güvenlik sınırı olarak desteklenmeyen .NET Framework'te Kod Erişim Güvenliği'ni (CAS) kullanır. PERMISSION_SET = SAFE ile oluşturulan bir CLR derlemesi dış sistem kaynaklarına erişebilir, yönetilmeyen kodu çağırabilir ve sysadmin ayrıcalıkları alabilir. SQL Server 2017 (14.x) ve sonraki sürümlerinde, sp_configure seçeneği, clr katı güvenlik, CLR derlemelerinin güvenliğini artırır. clr strict security varsayılan olarak etkinleştirilir ve SAFE ve EXTERNAL_ACCESS derlemeleri UNSAFEolarak işaretlenmiş gibi değerlendirir. geriye dönük uyumluluk için clr strict security seçeneği devre dışı bırakılabilir, ancak önerilmez.

Tüm derlemeleri, UNSAFE ASSEMBLY veritabanında master izni verilmiş ilgili oturum ile bir sertifika veya asimetrik anahtarla imzalamanızı öneririz. SQL Server yöneticileri, Veritabanı Motoru'nun güvenmesi gereken bir derleme listesine de derleme ekleyebilir. For more information, see sys.sp_add_trusted_assembly.

Derleme güvenliğini yönetme

Yönetilen kodu çalıştırdığında bir derlemenin .NET Code Access Security tarafından korunan kaynaklara ne kadar erişebileceğini denetleyebilirsiniz. Bir derleme oluştururken veya değiştirirken üç izin kümesinden birini belirterek bunu yaparsınız: SAFE, EXTERNAL_ACCESSveya UNSAFE.

SAFE permission

SAFE varsayılan izin kümesidir ve en kısıtlayıcıdır. SAFE 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şemez. SAFE kodu yerel SQL Server veritabanlarındaki verilere erişebilir veya yerel veritabanları dışındaki kaynaklara erişmeyi içermeyen hesaplamalar ve iş mantığı gerçekleştirebilir.

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

EXTERNAL_ACCESS permission

EXTERNAL_ACCESS derlemelerin dosyalar, ağlar, Web hizmetleri, ortam değişkenleri ve kayıt defteri gibi belirli dış sistem kaynaklarına erişmesine olanak tanır. Yalnızca EXTERNAL ACCESS izinlerine sahip SQL Server oturum açma işlemleri EXTERNAL_ACCESS derlemeler oluşturabilir.

SAFE ve EXTERNAL_ACCESS derlemeleri yalnızca doğrulanabilir tür güvenli kod içerebilir. Bu, bu derlemelerin sınıflara yalnızca tür tanımı için geçerli olan iyi tanımlanmış giriş noktaları aracılığıyla erişebileceği anlamına gelir. Bu nedenle, koda ait olmayan bellek arabelleklerine rastgele erişemezler. Ayrıca, SQL Server işleminin sağlamlığı üzerinde olumsuz bir etkiye sahip olabilecek işlemler gerçekleştiremezler.

UNSAFE permission

UNSAFE, derlemelere SQL Server içinde ve dışında kaynaklara sınırsız erişim sağlar. bir UNSAFE derlemesinden çalışan kod yönetilmeyen kodu çağırabilir.

Ayrıca UNSAFE belirtilmesi, derlemedeki kodun CLR doğrulayıcı tarafından tür güvensiz olarak kabul edilen işlemleri gerçekleştirmesine olanak tanır. Bu işlemler, SQL Server işlem alanında bulunan bellek arabelleklerine denetimsiz bir şekilde erişebilir. UNSAFE derlemeleri, SQL Server veya ortak dil çalışma zamanının güvenlik sistemini de devredebilir. UNSAFE izinleri yalnızca deneyimli geliştiriciler veya yöneticiler tarafından yüksek oranda güvenilen derlemelere verilmelidir. Only members of the sysadmin fixed server role can create UNSAFE assemblies.

Derlemeler üzerindeki kısıtlamalar

SQL Server, güvenilir ve ölçeklenebilir bir şekilde çalıştırılabildiklerinden emin olmak için derlemelerde yönetilen kod üzerinde belirli kısıtlamalar getirir. Bu, sunucunun sağlamlığını tehlikeye atabilecek belirli işlemlere SAFE ve EXTERNAL_ACCESS derlemelerinde izin verilmeyebileceği anlamına gelir.

İzin verilmeyen özel öznitelikler

Derlemelere aşağıdaki özel öznitelikler eklenemez:

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, SAFE ve EXTERNAL_ACCESS derlemeleri aşağıdaki özel özniteliklerle eklenemez:

System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute

İzin Verilmeyen .NET Framework API'leri

İzin verilmeyen HostProtectionAttributes biriyle ek açıklama ekleyen .NET Framework API'leri SAFE ve EXTERNAL_ACCESS derlemelerinden çağrılamıyor.

HostProtectionAttribute.SelfAffectingProcessMgmt
HostProtectionAttribute.SelfAffectingThreading
HostProtectionAttribute.Synchronization
HostProtectionAttribute.SharedState
HostProtectionAttribute.ExternalProcessMgmt
HostProtectionAttribute.ExternalThreading
HostProtectionAttribute.SecurityInfrastructure
HostProtectionAttribute.MayLeakOnAbort
HostProtectionAttribute.UI

Desteklenen .NET Framework derlemeleri

Özel derlemeniz tarafından başvuruda bulunılan tüm derlemeler CREATE ASSEMBLYkullanılarak SQL Server'a yüklenmelidir. Aşağıdaki .NET Framework derlemeleri SQL Server'a zaten yüklenmiş ve bu nedenle, CREATE ASSEMBLYkullanmak zorunda kalmadan özel derlemeler tarafından başvurulabilir.

  • mscorlib.dll
  • CustomMarshalers.dll
  • Microsoft.VisualBasic.dll
  • Microsoft.VisualC.dll
  • System.Configuration.dll
  • System.Core.dll
  • System.Data.OracleClient.dll
  • System.Data.SqlXml.dll
  • System.Data.dll
  • System.Deployment.dll
  • System.Security.dll
  • System.Transactions.dll
  • System.Web.Services.dll
  • System.Xml.Linq.dll
  • system.Xml.dll
  • System.dll