Udostępnij za pośrednictwem


Ograniczenia modelu programowania integracji środowiska CLR

Dotyczy:programu SQL ServerAzure SQL Managed Instance

Podczas tworzenia zarządzanej procedury składowanej lub innego zarządzanego obiektu bazy danych program SQL Server wykonuje pewne kontrole kodu, które należy wziąć pod uwagę. Te testy są wykonywane w zestawie kodu zarządzanego po pierwszym zarejestrowaniu w bazie danych przy użyciu instrukcji CREATE ASSEMBLY, a także w czasie wykonywania. Kod zarządzany jest również sprawdzany w czasie wykonywania, ponieważ w zestawie mogą istnieć ścieżki kodu, które nigdy nie mogą być osiągane w czasie wykonywania.

Te testy kodu zapewniają elastyczność rejestrowania zestawów innych firm szczególnie, dzięki czemu zestaw nie jest blokowany, gdy istnieje niebezpieczny kod przeznaczony do uruchamiania w środowisku klienta, ale nigdy nie zostanie wykonany w hostowanym środowisku uruchomieniowym języka wspólnego (CLR). Wymagania, które musi spełniać kod zarządzany, zależą od tego, czy zestaw jest zarejestrowany jako SAFE, EXTERNAL_ACCESSlub UNSAFE. SAFE jest najbardziej rygorystycznym poziomem zabezpieczeń.

Oprócz ograniczeń w zestawach kodu zarządzanego istnieją również przyznane uprawnienia zabezpieczeń kodu. ClR obsługuje model zabezpieczeń nazywany zabezpieczeniami kodu (CAS) dla kodu zarządzanego. W tym modelu uprawnienia są przyznawane zestawom na podstawie tożsamości kodu. zestawy SAFE, EXTERNAL_ACCESSi UNSAFE mają różne uprawnienia cas. Aby uzyskać więcej informacji, zobacz zabezpieczenia dostępu kodu integracji środowiska CLR.

Jeśli ustawiono zasad wydawcy , zakończy się niepowodzeniem.

SPRAWDZANIE TWORZENIA ZESTAWU

Po uruchomieniu instrukcji CREATE ASSEMBLY następujące testy są wykonywane dla każdego poziomu zabezpieczeń. Jeśli sprawdzanie nie powiedzie się, CREATE ASSEMBLY zakończy się niepowodzeniem z komunikatem o błędzie.

Globalny (dowolny poziom zabezpieczeń)

Wszystkie zestawy, do których odwołuje się odwołanie, muszą spełniać co najmniej jedno z następujących kryteriów:

  • Zestaw jest już zarejestrowany w bazie danych.

  • Zestaw jest jednym z obsługiwanych zestawów. Aby uzyskać więcej informacji, zobacz Obsługiwane biblioteki programu .NET Framework.

  • Używasz CREATE ASSEMBLY FROM <location>, a wszystkie przywołyne zestawy i ich zależności są dostępne w <location>.

  • Używasz CREATE ASSEMBLY FROM <bytes ...>, a wszystkie odwołania są określane za pośrednictwem spacji oddzielonych bajtami.

EXTERNAL_ACCESS

Wszystkie zestawy EXTERNAL_ACCESS muszą spełniać następujące kryteria:

  • Pola statyczne nie są używane do przechowywania informacji. Pola statyczne tylko do odczytu są dozwolone.

  • Test PEVerify jest przekazywany. Narzędzie PEVerify (peverify.exe), które sprawdza, czy kod wspólnego języka pośredniego (CIL) i skojarzone metadane spełniają wymagania bezpieczeństwa typu, jest dostarczany z zestawem .NET Framework SDK.

  • Synchronizacja, na przykład z klasą SynchronizationAttribute, nie jest używana.

  • Metody finalizatora nie są używane.

Następujące atrybuty niestandardowe są niedozwolone w zestawach EXTERNAL_ACCESS:

  • 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

BEZPIECZNY

  • Wszystkie EXTERNAL_ACCESS warunki zestawu są sprawdzane.

Testy środowiska uruchomieniowego

W czasie wykonywania zestaw kodu jest sprawdzany pod kątem następujących warunków. Jeśli którykolwiek z tych warunków zostanie znaleziony, zarządzany kod nie może zostać uruchomiony i zostanie zgłoszony wyjątek.

NIEBEZPIECZNY

Zestaw nie może być ładowany jawnie przez wywołanie metody System.Reflection.Assembly.Load() z tablicy bajtów lub niejawnie przy użyciu przestrzeni nazw Reflection.Emit.

EXTERNAL_ACCESS

Wszystkie warunki UNSAFE są sprawdzane.

Wszystkie typy i metody oznaczone następującymi wartościami atrybutu ochrony hosta (HPA) na obsługiwanej liście zestawów są niedozwolone.

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

Aby uzyskać więcej informacji na temat obliczeń HPA i listy niedozwolonych typów i elementów członkowskich w obsługiwanych zestawach, zobacz Atrybuty ochrony hosta i Programowanie integracji CLR.

BEZPIECZNY

Wszystkie warunki EXTERNAL_ACCESS są sprawdzane.