Vertrauensebenen für Sicherheit beim Zugriff auf Ressourcen
In diesem Thema wird erläutert, wie der Zugriff auf die Typen von Ressourcen eingeschränkt wird, die System.Transactions verfügbar macht.
Es gibt drei Hauptvertrauensebenen für System.Transactions. Die Vertrauensebenen werden basierend auf den Ressourcentypen definiert, die System.Transactions verfügbar macht, und auf der Grundlage der Vertrauensebene, die für den Zugriff auf diese Ressourcen erforderlich sein soll. Die Ressourcen, auf die System.Transactions Zugriff gewährt, sind Systemspeicher, freigegebene prozessübergreifende Ressourcen und systemweite Ressourcen. Diese Ebenen sind die folgenden:
AllowPartiallyTrustedCallers (APTCA) für Anwendungen, die Transaktionen in einer einzelnen Anwendungsdomäne verwenden.
DistributedTransactionPermission (DTP) für Anwendungen, die verteilte Transaktionen verwenden.
Volle Vertrauenswürdigkeit für dauerhafte Ressourcen, Konfigurationsverwaltungsanwendungen und Legacy-Interop-Anwendungen
Hinweis
Sie sollten keine Eintragungsschnittstelle mit Identitätswechselkontexten aufrufen.
Vertrauensebenen
APTCA (teilweise vertrauenswürdig)
Die System.Transactions-Assembly kann von teilweise vertrauenswürdigem Code aufgerufen werden, da sie mit dem AllowPartiallyTrustedCallers-Attribut (APTCA) gekennzeichnet ist. Dieses Attribut entfernt im Wesentlichen die implizite Option LinkDemand für den FullTrust-Berechtigungssatz, die sonst automatisch in jedem Typ für jede öffentlich zugängliche Methode festgelegt wird. Für einige Typen und Member sind allerdings weiterhin stärkere Berechtigungen erforderlich.
Das APTCA-Attribut ermöglicht es Anwendungen, Transaktionen in teilweiser Vertrauenswürdigkeit innerhalb einer einzelnen Anwendungsdomäne zu verwenden. Dadurch ist die Verwendung nicht eskalierter Transaktionen und flüchtiger Eintragungen möglich, die zur Fehlerbehandlung verwendet werden können. Ein Beispiel dafür sind eine Transaktions-Hashtabelle und eine Anwendung, die sie verwendet. Daten können mit einer einzigen Transaktion der Hashtabelle hinzugefügt oder aus ihr entfernt werden. Wird später ein Rollback für diese Transaktion ausgeführt, können alle Änderungen, die im Rahmen dieser Transaktion an der Hashtabelle vorgenommen wurden, wieder rückgängig gemacht werden.
DistributedTransactionPermission (DTP)
Wenn eine System.Transactions-Transaktion zur Verwaltung durch MSDTC eskaliert wird, fordert System.Transactions die DistributedTransactionPermission (DTP) auf, die verteilte Transaktion zu erstellen. Das bedeutet, dass dem Code, der für die Eskalation der Transaktion verantwortlich ist (beispielsweise durch Serialisierung oder zusätzliche dauerhafte Eintragungen), DTP erteilt werden muss. Der Code, der ursprünglich die System.Transactions-Transaktion erstellt hat, muss diese Berechtigung nicht unbedingt besitzen.
FullTrust-Linkaufrufe
Diese Berechtigungsstufe ist dazu gedacht, die Anwendungen zu beschränken, die in dauerhafte Ressourcen schreiben. Bei einem Fehler muss die Anwendung in der Lage sein, die Verbindung zum Transaktions-Manager wiederherzustellen, um das Endergebnis der Transaktion in Erfahrung zu bringen und dauerhafte Daten aktualisieren zu können. Dieser Anwendungstyp wird als dauerhafter Quellen-Manager bezeichnet. Ein klassisches Beispiel für diesen Anwendungstyp ist SQL.
Um die Wiederherstellung zu ermöglichen, ist dieser Anwendungstyp in der Lage, Systemressourcen permanent zu belegen. Das liegt daran, dass sich der wiederherstellungsfähige Transaktions-Manager Transaktionen, für die ein Commit ausgeführt wurde, so lange merken muss, bis er bestätigen kann, dass alle Ressourcen-Manager, die an der Transaktion teilnehmen, Kenntnis über das Ergebnis erhalten haben. Daher benötigt dieser Anwendungstyp volle Vertrauenswürdigkeit und sollte erst nach Erteilung dieser Vertrauensebene ausgeführt werden.
Weitere Informationen zu dauerhaften Eintragungen und zur Wiederherstellung finden Sie in den Themen Eintragen von Ressourcen als Teilnehmer an einer Transaktion und Durchführen einer Wiederherstellung.
Anwendungen, die Legacy-Interop-Aufgaben mit COM+ ausführen, benötigen ebenfalls die volle Vertrauenswürdigkeit.
Es folgt eine Liste von Typen und Members, die nicht von teilweise vertrauenswürdigem Code aufgerufen werden können, da sie mit dem deklarativen Sicherheitsattribut FullTrust versehen sind:
PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")
Nur der direkte Aufrufer muss über den FullTrust-Berechtigungssatz verfügen, um die obigen Typen und Methoden zu verwenden.