Udostępnij za pośrednictwem


Ograniczenia Model programowania integracji CLR

When you are building a managed stored procedure or other managed database object, there are certain code checks performed by SQL Server that need to be considered.SQL Server performs checks on the managed code assembly when it is first registered in the database, using the CREATE ASSEMBLY statement, and also at runtime.Kod zarządzany jest sprawdzana w czasie wykonywania ponieważ w wirtualny plik dziennika może być ścieżki kodu, które nigdy faktycznie może zostać osiągnięta w czasie wykonywania.Zapewnia elastyczność do rejestrowania zestawów stron trzecich, szczególnie w tak, aby wirtualny plik dziennika byłoby gdy blokowane jest "niebezpieczny" kod przeznaczony do pracy w środowisku klient, ale nigdy nie wykonywane w obsługiwanych CLR.Wymagania, które muszą spełniać kod zarządzany zależą od tego, czy wirtualny plik dziennika jest zarejestrowany jako SAFE, EXTERNAL_ACCESS, lub UNSAFE, SAFE jest najsurowsze i są wymienione poniżej.

Oprócz ograniczeń na zestawów zawierających kod zarządzany są również kod uprawnienia zabezpieczeń, które są przyznawane.Common language runtime (CLR) obsługuje model zabezpieczeń o nazwie zabezpieczenia dostępu kodu (CAS) kod zarządzany.W tym modelu uprawnienia są przyznawane na podstawie tożsamości kod zespołów.SAFE, EXTERNAL_ACCESS, i UNSAFE zestawy mają różne uprawnienia urzędów certyfikacji.Aby uzyskać więcej informacji, zobacz Zabezpieczenia dostępu do kodu integracji CLR.

Tworzenie zestawu kontroli

Gdy CREATE ASSEMBLY instrukcja, następujące kontrole są przeprowadzane dla każdego poziom zabezpieczeń.Żadnego wyboru nie powiedzie się, jeżeli CREATE ASSEMBLY nie powiedzie się komunikat o błędzie.

Szablon globalny (dowolny poziom zabezpieczeń)

Wszystkie zespoły odwołanie musi spełniać jeden lub więcej z następujących kryteriów:

  • wirtualny plik dziennika jest już zarejestrowany w bazie danych.

  • wirtualny plik dziennika jest jednym z obsługiwanych zestawów.Aby uzyskać więcej informacji, zobacz Obsługiwane.NET Framework bibliotek.

  • You are using CREATE ASSEMBLY FROM<location>, and all the referenced assemblies and their dependencies are available in <location>.

  • You are using CREATE ASSEMBLY FROM<bytes …>, and all the references are specified via space separated bytes.

EXTERNAL_ACCESS

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

  • Statyczne pola nie są używane do przechowywania informacji.Dozwolone są tylko do odczytu pola statycznego.

  • PEVerify test jest przekazywana.Wyposażone w kontroli spełniające instrukcje MSIL kodu i metadane skojarzone wpisz wymogi bezpieczeństwa, narzędzie PEVerify (peverify.exe).NET Framework SDK.

  • Synchronizacja, na przykład z SynchronizationAttribute klasy, nie jest używany.

  • Metody finalizatorów nie są używane.

Następujące atrybuty niestandardowe są niedozwolone w EXTERNAL_ACCESS zespołów:

  • 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

  • Można zastosować elementów system.STAThreadAttribute

  • System.ThreadStaticAttribute

BEZPIECZNE

  • Wszystkie EXTERNAL_ACCESS wirtualny plik dziennika warunków są sprawdzane.

Kontrole Runtime

W czasie wykonywania kodu wirtualny plik dziennika jest sprawdzana pod kątem następujących warunków.Jeżeli warunki te zostaną znalezione, kod zarządzany nie może być uruchomiony i będzie wyjątek.

NIEBEZPIECZNE

Ładowanie wirtualny plik dziennika — albo jawnie przez wywołanie System.Reflection.Assembly.Load() metoda z tablicy bajtowej lub niejawnie korzystając z Reflection.Emit nazw — nie jest dozwolona.

EXTERNAL_ACCESS

Wszystkie UNSAFE warunki są sprawdzane.

Wszystkie typy i metod o następujące wartości atrybut (HPA) ochrona hosta na liście obsługiwanych zestawów są niedozwolone.

  • SelfAffectingProcessMgmt

  • SelfAffectingThreading

  • Synchronizacja

  • SharedState

  • ExternalProcessMgmt

  • ExternalThreading

  • SecurityInfrastructure

  • MayLeakOnAbort

  • INTERFEJS UŻYTKOWNIKA

Aby uzyskać więcej informacji o HPAs i Lista niedozwolonych typów i członkowie zespołów obsługiwane, zobacz Atrybuty ochrony hosta i integracji CLR programowania.

BEZPIECZNE

Wszystkie EXTERNAL_ACCESS warunki są sprawdzane.