Aracılığıyla paylaş


CLR tümleştirme programlama modeli kısıtlamaları

Applies to:SQL ServerAzure SQL Managed Instance

Yönetilen bir saklı yordam veya başka bir yönetilen veritabanı nesnesi oluşturduğunuzda, SQL Server dikkate alınması gereken belirli kod denetimleri gerçekleştirir. Bu denetimler, CREATE ASSEMBLY deyimi kullanılarak ve çalışma zamanında veritabanında ilk kez kaydedildiğinde yönetilen kod derlemesinde gerçekleştirilir. Yönetilen kod çalışma zamanında da denetlenebilir çünkü bir derlemede çalışma zamanında hiçbir zaman ulaşılamayacak kod yolları olabilir.

These code checks provide flexibility for registering third-party assemblies especially, so that an assembly isn't blocked where there's unsafe code designed to run in a client environment, but would never be executed in the hosted common language runtime (CLR). Yönetilen kodun karşılaması gereken gereksinimler, derlemenin SAFE, EXTERNAL_ACCESSveya UNSAFEolarak kaydedilip kaydedilmediğine bağlıdır. SAFE en katı güvenlik düzeyidir.

Yönetilen kod derlemelerine konulan kısıtlamalara ek olarak, verilen kod güvenliği izinleri de vardır. CLR, yönetilen kod için kod erişim güvenliği (CAS) adlı bir güvenlik modelini destekler. Bu modelde, kod kimliğine göre derlemelere izinler verilir. SAFE, EXTERNAL_ACCESSve UNSAFE derlemeleri farklı CAS izinlerine sahiptir. Daha fazla bilgi için bkz. CLR tümleştirme kodu erişim güvenliği.

If the publisher policy is set, CREATE ASSEMBLY fails.

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.

CREATE ASSEMBLY denetimleri

CREATE ASSEMBLY deyimi çalıştırıldığında, her güvenlik düzeyi için aşağıdaki denetimler gerçekleştirilir. Herhangi bir denetim başarısız olursa, CREATE ASSEMBLY bir hata iletisiyle başarısız olur.

Genel (herhangi bir güvenlik düzeyi)

Başvuruda bulunan tüm derlemeler aşağıdaki ölçütlerden birini veya daha fazlasını karşılamalıdır:

  • Derleme veritabanında zaten kayıtlı.

  • Derleme desteklenen derlemelerden biridir. Daha fazla bilgi için bkz. Desteklenen .NET Framework kitaplıkları.

  • CREATE ASSEMBLY FROM <location>kullanıyorsunuz ve başvuruda bulunulan tüm derlemeler ve bağımlılıkları <location>içinde kullanılabilir.

  • CREATE ASSEMBLY FROM <bytes ...>kullanıyorsunuz ve tüm başvurular boşlukla ayrılmış baytlarla belirtilir.

EXTERNAL_ACCESS

Tüm EXTERNAL_ACCESS derlemeleri aşağıdaki ölçütleri karşılamalıdır:

  • Statik alanlar bilgileri depolamak için kullanılmaz. Salt okunur statik alanlara izin verilir.

  • PEVerify testi geçirilir. Ortak ara dil (CIL) kodunun ve ilişkili meta verilerin tür güvenliği gereksinimlerini karşılayıp karşılamadığını denetleyen PEVerify aracı (peverify.exe), .NET Framework SDK'sı ile sağlanır.

  • Örneğin SynchronizationAttribute sınıfıyla eşitleme kullanılmaz.

  • Sonlandırıcı yöntemleri kullanılmaz.

EXTERNAL_ACCESS derlemelerinde aşağıdaki özel özniteliklere izin verilmez:

  • 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.Security.SuppressUnmanagedCodeSecurityAttribute
  • System.Security.UnverifiableCodeAttribute
  • System.STAThreadAttribute
  • System.ThreadStaticAttribute

SAFE

  • Tüm EXTERNAL_ACCESS derleme koşulları denetleniyor.

Runtime checks

Çalışma zamanında kod derlemesi aşağıdaki koşullar için denetlenmektedir. Bu koşullardan herhangi biri bulunursa, yönetilen kodun çalışmasına izin verilmez ve bir özel durum oluşturulur.

UNSAFE

Bir bayt dizisinden System.Reflection.Assembly.Load() yöntemini çağırarak veya örtük olarak Reflection.Emit ad alanını kullanarak bir derlemeyi yükleyemezsiniz.

EXTERNAL_ACCESS

Tüm UNSAFE koşulları denetleniyor.

Desteklenen derlemeler listesindeki aşağıdaki konak koruma özniteliği (HPA) değerleriyle açıklama ekleyen tüm tür ve yöntemlere izin verilmez.

  • SelfAffectingProcessMgmt
  • SelfAffectingThreading
  • Synchronization
  • SharedState
  • ExternalProcessMgmt
  • ExternalThreading
  • SecurityInfrastructure
  • MayLeakOnAbort
  • UI

HPA'lar ve desteklenen derlemelerdeki izin verilmeyen türlerin ve üyelerin listesi hakkında daha fazla bilgi için bkz. Konak koruma öznitelikleri ve CLR tümleştirme programlama.

SAFE

Tüm EXTERNAL_ACCESS koşulları denetleniyor.