Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Applies to:SQL Server
Azure SQL Managed Instance
Wenn Sie eine verwaltete gespeicherte Prozedur oder ein anderes verwaltetes Datenbankobjekt erstellen, führt SQL Server bestimmte Codeprüfungen aus, die berücksichtigt werden müssen. Diese Prüfungen werden bei der ersten Registrierung in der Datenbank, mithilfe der CREATE ASSEMBLY Anweisung und auch zur Laufzeit für die Assembly mit verwaltetem Code ausgeführt. Der verwaltete Code wird auch zur Laufzeit überprüft, da in einer Assembly möglicherweise Codepfade vorhanden sind, die möglicherweise nie zur Laufzeit erreicht werden.
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). Die Anforderungen, die der verwaltete Code erfüllen muss, hängen davon ab, ob die Assembly als SAFE, oder EXTERNAL_ACCESSUNSAFE.
SAFE ist die strengste Sicherheitsstufe.
Neben den Einschränkungen, die für verwaltete Codeassemblys gelten, werden außerdem Sicherheitsberechtigungen für Code erteilt. Die CLR unterstützt das Sicherheitsmodell der Codezugriffssicherheit (Code Access Security, CAS) für verwalteten Code. In diesem Modell werden Assemblys Berechtigungen auf Grundlage der Identität des Codes gewährt.
SAFE-, EXTERNAL_ACCESS- und UNSAFE-Assemblys verfügen über andere CAS-Berechtigungen (Code Access Security). Weitere Informationen finden Sie unter CLR-Integrationscodezugriffssicherheit.
If the publisher policy is set, CREATE ASSEMBLY fails.
Codezugriffssicherheit wird nicht mehr unterstützt
CLR verwendet die Codezugriffssicherheit (Code Access Security, CAS) im .NET Framework, die nicht länger als Sicherheitsbegrenzung unterstützt wird. Eine CLR-Assembly, die mit PERMISSION_SET = SAFE erstellt wurde, kann womöglich auf externe Systemressourcen zugreifen, nicht verwalteten Code aufrufen und sysadmin-Privilegien erwerben. In SQL Server 2017 (14.x) und höheren Versionen verbessert die sp_configure Option clr strict security die Sicherheit von CLR-Assemblys.
clr strict security ist standardmäßig aktiviert und behandelt SAFE- und EXTERNAL_ACCESS-Assemblys so, als wären Sie als UNSAFE gekennzeichnet. Die Option clr strict security kann für die Abwärtskompatibilität deaktiviert werden, es wird jedoch nicht empfohlen.
Es wird empfohlen, dass Sie alle Assemblys durch ein Zertifikat oder einen asymmetrischen Schlüssel mit einem entsprechenden Anmeldenamen signieren, dem UNSAFE ASSEMBLY-Berechtigung für die master-Datenbank gewährt wurde. SQL Server-Administratoren können auch Assemblys einer Liste von Assemblys hinzufügen, der die Datenbank-Engine vertrauen sollte. For more information, see sys.sp_add_trusted_assembly.
ERSTELLEN VON ASSEMBLYprüfungen
Wenn die CREATE ASSEMBLY Anweisung ausgeführt wird, werden die folgenden Prüfungen für jede Sicherheitsstufe ausgeführt. Wenn eine Überprüfung fehlschlägt, CREATE ASSEMBLY schlägt die Fehlermeldung fehl.
Global (eine beliebige Sicherheitsebene)
Alle Assemblys, auf die verwiesen wird, müssen ein oder mehrere der folgenden Kriterien erfüllen:
Die Assembly ist bereits in der Datenbank registriert.
Die Assembly ist eine der unterstützten Assemblys. Weitere Informationen finden Sie unter Unterstützten .NET Framework-Bibliotheken.
Sie verwenden
CREATE ASSEMBLY FROM <location>, und alle referenzierten Assemblys und deren Abhängigkeiten sind verfügbar in<location>.Sie verwenden
CREATE ASSEMBLY FROM <bytes ...>, und alle Verweise werden über leerzeichentrennte Bytes angegeben.
EXTERNAL_ACCESS
Alle EXTERNAL_ACCESS-Assemblys müssen die folgenden Kriterien erfüllen:
Statische Felder werden nicht zum Speichern von Informationen verwendet. Schreibgeschützte statische Felder sind zulässig.
Der PEVerify-Test wird bestanden. Das PEVerify-Tool (
peverify.exe), mit dem überprüft wird, ob der Code für die allgemeine Zwischensprache (CIL) und die zugehörigen Metadaten den Typsicherheitsanforderungen entsprechen, wird mit dem .NET Framework SDK bereitgestellt.Die Synchronisierung, z. B. mit der
SynchronizationAttributeKlasse, wird nicht verwendet.Finalizermethoden werden nicht verwendet.
Die folgenden benutzerdefinierten Attribute sind in EXTERNAL_ACCESS-Assemblys nicht zulässig:
System.ContextStaticAttributeSystem.MTAThreadAttributeSystem.Runtime.CompilerServices.MethodImplAttributeSystem.Runtime.CompilerServices.CompilationRelaxationsAttributeSystem.Runtime.Remoting.Contexts.ContextAttributeSystem.Runtime.Remoting.Contexts.SynchronizationAttributeSystem.Runtime.InteropServices.DllImportAttributeSystem.Security.Permissions.CodeAccessSecurityAttributeSystem.Security.SuppressUnmanagedCodeSecurityAttributeSystem.Security.UnverifiableCodeAttributeSystem.STAThreadAttributeSystem.ThreadStaticAttribute
SAFE
- Alle
EXTERNAL_ACCESS-Assemblybedingungen werden überprüft.
Runtime checks
Zur Laufzeit wird die Codeassembly auf die folgenden Bedingungen überprüft. Wenn eine dieser Bedingungen gefunden wird, darf der verwaltete Code nicht ausgeführt werden, und eine Ausnahme wird ausgelöst.
UNSAFE
Sie können eine Assembly nicht explizit laden, indem Sie die System.Reflection.Assembly.Load() Methode aus einem Bytearray aufrufen oder implizit den Namespace verwenden Reflection.Emit .
EXTERNAL_ACCESS
Alle UNSAFE-Bedingungen werden überprüft.
Alle Typen und Methoden, die mit den folgenden Hostschutzattributwerten in der unterstützten Assemblyliste als Anmerkungen versehen sind, sind nicht zulässig.
SelfAffectingProcessMgmtSelfAffectingThreadingSynchronizationSharedStateExternalProcessMgmtExternalThreadingSecurityInfrastructureMayLeakOnAbortUI
Weitere Informationen zu HPAs und einer Liste der unzulässigen Typen und Member in den unterstützten Assemblys finden Sie unter Hostschutzattribute und CLR-Integrationsprogrammierung.
SAFE
Alle EXTERNAL_ACCESS-Bedingungen werden überprüft.