SQL Server-Programmierung und Hostschutzattribute
Die Möglichkeit zum Laden und Ausführen von verwaltetem Code in einem SQL Server-Host erfordert, dass die Hostanforderungen für die Codezugriffssicherheit und den Hostressourcenschutz erfüllt werden. Die Anforderungen für die Codezugriffssicherheit werden durch einen von drei SQL Server-Berechtigungssätzen angegeben: SICHER, EXTERNER ZUGRIFF oder UNSICHER. Code, der innerhalb der Berechtigungssätze SICHER oder EXTERNER ZUGRIFF ausgeführt wird, muss bestimmte Typen oder Member vermeiden, bei denen das HostProtectionAttribute-Attribut angewendet wird. Die HostProtectionAttribute ist keine Sicherheitsberechtigung, sondern eine Zuverlässigkeitsgarantie, da sie bestimmte Codekonstrukte, entweder Typen oder Methoden, identifiziert, die der Host möglicherweise nicht zulässt. Die Verwendung des HostProtectionAttribute erzwingt ein Programmiermodell, mit dem die Stabilität des Hosts besser geschützt werden kann.
Hinweis
Die Codezugriffssicherheit (CAS, Code Access Security) 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*innen 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 lässt die Verwendung eines Typs oder Members nicht zu, wenn dieser über ein HostProtectionAttribute verfügt, der einen 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 Member
Die folgende Tabelle zeigt die Typen und Member an, deren HostProtectionResource-Werte von SQL Server nicht zugelassen werden.
SQL Server-Berechtigungssätze
SQL Server ermöglicht Benutzern die Angabe der Zuverlässigkeitsanforderungen für in einer Datenbank bereitgestellten Code. Wenn Assemblys in die Datenbank hochgeladen werden, kann der Verfasser der Assembly einen von drei Berechtigungssätzen für diese Assembly angeben: SICHER, EXTERNER ZUGRIFF oder UNSICHER.
Berechtigungssatz | SAFE | EXTERNER ZUGRIFF | UNSAFE |
---|---|---|---|
Codezugriffssicherheit | Nur ausführen | Ausführen + Zugriff auf externe Ressourcen | Nicht eingeschränkt |
Beschränkungen des Programmiermodells | Yes | Yes | Keine Einschränkungen |
Überprüfbarkeit erforderlich | Yes | Ja | Nein |
Aufrufbarkeit von systemeigenem Code | No | Nein | Ja |
SAFE ist der zuverlässigste und sicherste Modus, der mit Einschränkungen hinsichtlich des zulässigen Programmiermodells einhergeht. SICHERER Code verfügt über Funktionen für hohe Zuverlässigkeit und Sicherheit. 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.
EXTERNER ZUGRIFF bietet eine mittlere Sicherheitsoption, mit der Code auf Ressourcen außerhalb der Datenbank zugreifen kann, aber noch die Zuverlässigkeit und Sicherheit der SICHER-Assembly besteht.
UNSAFE ist für hoch vertrauenswürdigen Code vorgesehen, der nur von Datenbankadministratoren erstellt werden kann. Dieser vertrauenswürdige Code verfügt über keine Zugriffsbeschränkungen und kann nicht verwalteten (nativen) Code aufrufen.
SQL Server verwendet die Sicherheitsrichtlinie für den Codezugriff auf Hostebene, um eine Hostrichtlinie einzurichten, die einen der drei Berechtigungssätze gewährt, die auf dem in SQL Server-Katalogen gespeicherten Berechtigungssatz basiert. 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.
Anhand dieser Gründe lässt SQL Server keine Verwendung von statischen Variablen und statischen Datenmembern zu. Bei SICHER- und EXTERNER ZUGRIFF-Assemblys überprüft SQL Server die Metadaten der Assembly zum Zeitpunkt von ASSEMBLY ERSTELLEN, und lässt die Erstellung dieser Assemblys fehlschlagen, wenn es feststellt, dass statische Datenmember oder Variablen verwendet wurden.