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.
Die Möglichkeit zum Laden und Ausführen von verwaltetem Code in einem SQL Server-Host erfordert die Erfüllung der Anforderungen des Hosts für codezugriffssicherheit und Hostressourcenschutz. Die Sicherheitsanforderungen für den Codezugriff werden durch einen von drei SQL Server-Berechtigungssätzen angegeben: SAFE, EXTERNAL-ACCESS oder UNSAFE. Code, der innerhalb der SAFE- oder EXTERNAL-ACCESS-Berechtigungssätze ausgeführt wird, muss bestimmte Typen oder Member, auf die das HostProtectionAttribute Attribut angewendet wurde, vermeiden. Das HostProtectionAttribute ist weniger eine Sicherheitsberechtigung als vielmehr eine Zuverlässigkeitsgarantie, indem es spezifische Codekonstrukte, entweder Typen oder Methoden, identifiziert, die der Host möglicherweise nicht zulassen darf. Die Verwendung der HostProtectionAttribute erzwingt ein Programmiermodell, das die Stabilität des Hosts schützt.
Hinweis
Code Access Security (CAS) ist in allen Versionen von .NET Framework und .NET veraltet. Aktuelle Versionen von .NET berücksichtigen keine CAS-Anmerkungen und erzeugen Fehler, wenn CAS-bezogene APIs verwendet werden. Entwickler sollten alternative Mittel zum Ausführen von Sicherheitsaufgaben suchen.
Hostschutzattribute
Hostschutzattribute identifizieren die Typen oder Member, die nicht zum Hostprogrammiermodell passen, und die folgenden erhöhten Zuverlässigkeitsrisiken darstellen:
Sie sind andernfalls ohne Auswirkung.
Sie können zur Destabilisierung von serververwaltetem Benutzercode führen.
Sie können zur Destabilisierung des Serverprozesses führen.
SQL Server verbietet die Verwendung eines Typs oder Elements, das einen HostProtectionAttribute-HostProtectionResource-Wert von SharedState, Synchronization, MayLeakOnAbort oder ExternalProcessMgmt angibt. Dies verhindert, dass Assemblys Member aufrufen, die die Freigabe des Zustands aktivieren, Synchronisierungen durchführen, möglicherweise ein Ressourcenleck bei Beendigung verursachen, oder Auswirkungen auf die Integrität des SQL Server-Prozesses haben.
Unzulässige Typen und Elemente
In der folgenden Tabelle werden Typen und Member identifiziert, deren HostProtectionResource Werte von SQL Server nicht zulässig sind.
SQL Server-Berechtigungssätze
SQL Server ermöglicht Benutzern die Angabe der Zuverlässigkeitsanforderungen für Code, der in einer Datenbank bereitgestellt wird. Wenn Assemblys in die Datenbank hochgeladen werden, kann der Autor der Assembly einen von drei Berechtigungssätzen für diese Assembly angeben: SAFE, EXTERNAL-ACCESS oder UNSAFE.
| Berechtigungssatz | SICHER | EXTERNER ZUGRIFF | UNSICHER |
|---|---|---|---|
| Codezugriffssicherheit | Nur ausführen | Ausführen + Zugriff auf externe Ressourcen | Uneingeschränkt |
| Beschränkungen des Programmiermodells | Ja | Ja | Keine Einschränkungen |
| Überprüfbarkeit erforderlich | Ja | Ja | Nein |
| Aufrufbarkeit von systemeigenem Code | Nein | Nein | Ja |
SAFE ist der zuverlässigste und sicherste Modus, der mit Einschränkungen hinsichtlich des zulässigen Programmiermodells einhergeht. SAFE-Code verfügt über hohe Zuverlässigkeits- und Sicherheitsfeatures. Assemblys der Stufe SAFE verfügen über ausreichende Berechtigungen für die Ausführung, die Durchführung von Berechnungen und den Zugriff auf die lokale Datenbank. Assemblys der Stufe SAFE müssen nachweislich typsicher sein und dürfen keinen nicht verwalteten Code aufrufen.
EXTERNAL-ACCESS bietet eine Zwischensicherheitsoption, sodass Code auf Ressourcen außerhalb der Datenbank zugreifen kann, aber dennoch die Zuverlässigkeit und Sicherheit von SAFE hat.
UNSAFE ist für hoch vertrauenswürdigen Code vorgesehen, der nur von Datenbankadministratoren erstellt werden kann. Dieser vertrauenswürdige Code hat keine Codezugriffseinschränkungen und kann nicht verwalteten (systemeigenen) Code aufrufen.
SQL Server verwendet die Sicherheitsrichtlinienebene für den Codezugriff auf Hostebene, um eine Hostrichtlinie einzurichten, die einen der drei Berechtigungssätze basierend auf dem in SQL Server-Katalogen gespeicherten Berechtigungssatz gewährt. Verwaltetem Code, der in der Datenbank ausgeführt wird, wird immer einer dieser Codezugriffsberechtigungssätze abgerufen.
Einschränkungen des Programmiermodells
Das Programmiermodell für verwalteten Code in SQL Server erfordert Funktionen, Prozeduren und Typen, die die Verwendung von Status über mehrere Aufrufe oder die Freigabe des Zustands über mehrere Benutzersitzungen nicht benötigen. Darüber hinaus kann ein Freigabezustand, wie bereits erläutert, zu schwerwiegenden Ausnahmen führen, die die Skalierbarkeit und Zuverlässigkeit der Anwendung gefährden können.
In Anbetracht dieser Überlegungen verbietet SQL Server die Verwendung statischer Variablen und statischer Datenmmber. Bei SAFE- und EXTERNAL-ACCESS-Assemblys untersucht SQL Server die Metadaten der Assembly zum Zeitpunkt von CREATE ASSEMBLY und schlägt die Erstellung solcher Assemblys fehl, wenn die Verwendung statischer Datenmitglieder und -variablen festgestellt wird.