Anfordern von Berechtigungen

Wichtiger HinweisWichtig

In .NET Framework, Version 4 wurde die Laufzeitunterstützung für die Berechtigungsanforderungen RequestMinimum, RequestOptional und RequestRefuse entfernt.Code, der auf .NET Framework 4 oder höher basiert, ist von diesem Thema nicht betroffen.Weitere Informationen über diese und andere Änderungen finden Sie unter Änderungen der Sicherheit in .NET Framework 4.

Durch das Anfordern von Berechtigungen teilen Sie der Laufzeit mit, welche Berechtigungen der Code benötigt. Berechtigungen für eine Assembly fordern Sie an, indem Sie Attribute (deklarative Syntax) im Assemblybereich des Codes einfügen. Nach Erstellen der Assembly speichert der Sprachcompiler die angeforderten Berechtigungen im Assemblymanifest. Zur Ladezeit untersucht die Laufzeit die Berechtigungsanforderungen und wendet Regeln der Sicherheitsrichtlinie an, um zu bestimmen, welche Berechtigungen der Assembly gewährt werden sollen. Anforderungen beeinflussen nur, welche Berechtigungen dem Code durch die Laufzeit verweigert werden. Es ist nicht möglich, die anfänglich durch die Laufzeit gewährten Berechtigungen zu erweitern. Die endgültige Kontrolle über die maximalen Berechtigungen, die Code erteilt werden können, liegt stets bei der lokalen Verwaltungsrichtlinie.

HinweisHinweis

Code, der für die lokale Ausführung auf einem Computer vorgesehen ist, wird in My_Computer_Zone ausgeführt. Diese Zone ist standardmäßig voll vertrauenswürdig.Bei voller Vertrauenswürdigkeit werden alle angeforderten Berechtigungen gewährt.Berechtigungsanforderungen sind immer erfolgreich, sogar bei Identitätsberechtigungen, bei denen die Identitätsbedingung nicht erfüllt ist.Wenn der Code nur in My_Computer_Zone ausgeführt werden soll, ist das Anfordern von Berechtigungen nicht erforderlich.Wenn der Code jedoch in einer der anderen Zonen ausgeführt werden soll, wird das Anfordern von Berechtigungen empfohlen.

HinweisHinweis

Im .NET Framework 3.5 Service Pack 1 und höher werden Anwendungen auf Freigaben innerhalb des Intranets standardmäßig mit voller Vertrauenswürdigkeit ausgeführt.Wenn die Anwendung von einer Freigabe ausgeführt werden soll, wird sie, wie eine Anwendung auf dem Computer, mit voller Vertrauenswürdigkeit ausgeführt.Weitere Informationen finden Sie unter Ausführen von Intranetanwendungen mit voller Vertrauenswürdigkeit.

Obwohl für einen Code, der teilweise vertrauenswürdig ausgeführt werden soll, nicht unbedingt Berechtigungen angefordert werden müssen, gibt es einige Gründe, dennoch Berechtigungen für den Code anzufordern:

  • Das Anfordern von Berechtigungen erhöht die Wahrscheinlichkeit, dass der Code ordnungsgemäß ausgeführt wird, wenn die Ausführung zulässig ist. Code, der einen Mindestsatz von Berechtigungen erfordert, wird ohne den Erhalt dieser Berechtigungen nicht ausgeführt. Wenn Sie keinen Mindestberechtigungssatz angeben, muss der Code sämtliche Situationen ordnungsgemäß behandeln, es sei denn, dass er durch fehlende Berechtigungen an der Ausführung gehindert wird.

  • Das Anfordern von Berechtigungen trägt dazu bei, dass dem Code nur die erforderlichen Berechtigungen erteilt werden. Wenn dem Code keine zusätzlichen Berechtigungen erteilt werden, kann er keine Ressourcen beschädigen, die durch diese zusätzlichen Berechtigungen geschützt sind, selbst wenn ein Missbrauch durch bösartigen Code vorliegt oder der Code Fehler enthält, die zur Beschädigung von Ressourcen führen können. Sie sollten über die erforderlichen Berechtigungen für den Code hinaus keine Berechtigungen anfordern.

  • Das Anfordern von Berechtigungen informiert Administratoren über die Mindestberechtigungen, die für die Anwendung benötigt werden, sodass sie die Sicherheitsrichtlinien entsprechend anpassen können. Die Berechtigungen, die die Anwendung benötigt, können Sie bei einem Visual Studio-Projekt auf der Projekteigenschaftenseite auf der Registerkarte Sicherheit überprüfen. Die Verwaltung der Anwendung ist schwierig, wenn dem Administrator diese Informationen nicht bekannt sind.

Durch das Anfordern von Berechtigungen wird die Laufzeit informiert, welche Berechtigungen für die ordnungsgemäße Ausführung der Anwendung erforderlich sind und welche nicht gewünscht werden. Greift eine Anwendung beispielsweise auf die lokale Festplatte ohne isolierte Speicherung zu, ist dafür FileIOPermission erforderlich. Wenn der Code FileIOPermission nicht anfordert und die lokalen Sicherheitseinstellungen diese Berechtigung für die Anwendung nicht zulassen, wird eine Sicherheitsausnahme ausgelöst, wenn die Anwendung versucht, auf die Festplatte zu schreiben. Selbst wenn die Anwendung die Ausnahme behandeln kann, ist das Schreiben auf die Festplatte nicht möglich. Dieses Verhalten kann für einen Benutzer ärgerlich sein, beispielsweise, wenn es sich bei der Anwendung um einen Text-Editor handelt, mit dem er bereits seit längerer Zeit arbeitet. Wenn die Anwendung jedoch FileIOPermission anfordert und die lokalen Sicherheitseinstellungen FileIOPermission für die Anwendung nicht zulassen, generiert die Anwendung diese Ausnahme beim Start, und dem Benutzer kann keine Arbeit verloren gehen. Wenn die Anwendung FileIOPermission anfordert und es sich um eine vertrauenswürdige Anwendung handelt, kann der Administrator die Sicherheitsrichtlinie so anpassen, dass die Ausführung von der Remotefreigabe zulässig ist.

Wenn der Code nicht auf geschützte Ressourcen zugreift oder geschützte Operationen ausführt, müssen keine Berechtigungen angefordert werden. Eine Berechtigungsanforderung ist z. B. nicht erforderlich, wenn der Code lediglich ein Ergebnis aus den an ihn übergebenen Eingaben berechnet, ohne dabei Ressourcen zu verwenden. Wenn der Code auf geschützte Ressourcen zugreift, jedoch nicht die erforderlichen Berechtigungen anfordert, kann die Ausführung trotzdem zulässig sein. Sie kann jedoch an einem bestimmten Punkt fehlschlagen, wenn auf eine Ressource zugegriffen werden soll, für die keine Berechtigungen bestehen.

Zum Anfordern von Berechtigungen müssen Sie wissen, welche Ressourcen und geschützten Operationen der Code verwendet sowie welche Berechtigungen diese Ressourcen und Operationen schützen. Darüber hinaus müssen Sie sämtliche Ressourcen verfolgen, auf die von Methoden der Klassenbibliotheken zugegriffen wird, die von den Komponenten aufgerufen werden. Eine Liste der Codezugriffsberechtigungen in .NET Framework finden Sie im Abschnitt Berechtigungen.

In der folgenden Tabelle werden die Typen der Berechtigungsanforderungen beschrieben.

Berechtigungsanforderung

Beschreibung

Mindestberechtigungen (RequestMinimum)

Berechtigungen, über die der Code zum Ausführen verfügen muss.

Optionale Berechtigungen (RequestOptional)

Berechtigungen, die der Code verwenden kann, die jedoch für die effiziente Ausführung nicht erforderlich sind. Diese Anforderung weist implizit alle anderen nicht speziell angeforderten Berechtigungen zurück.

Verweigerte Berechtigungen (RequestRefuse)

Berechtigungen, die dem Code keinesfalls erteilt werden sollen, selbst wenn die Sicherheitsrichtlinie die Erteilung zulässt.

Ausführen einer der oben aufgeführten Anforderungen für integrierte Berechtigungssätze (Anfordern von integrierten Berechtigungssätzen).

Integrierte Berechtigungssätze, u. a. Nothing, Execution, FullTrust, Internet, LocalIntranet und SkipVerification.

Ausführen einer der oben aufgeführten Anforderungen für XML-codierte Berechtigungssätze (Anfordern von codierten XML-Berechtigungen).

XML-Darstellung eines gewünschten Berechtigungssatzes, entweder eine Zeichenfolge mit dem XML-codierten Berechtigungssatz oder der Speicherort einer XML-Datei mit dem codierten Berechtigungssatz.

Wenn Sie die benötigten Berechtigungen mithilfe von RequestMinimum angeben, wird dem Code jede erforderliche Berechtigung erteilt, die von der Sicherheitsrichtlinie zugelassen wird. Die Ausführung des Codes ist nur zulässig, wenn ihm alle erforderlichen Berechtigungen erteilt werden.

Die Anforderung optionaler Berechtigungen ohne die Anforderung der erforderlichen Berechtigungen kann die einer Assembly erteilten Berechtigungen in einigen Fällen erheblich einschränken. Angenommen, die Sicherheitsrichtlinie erteilt normalerweise Assembly A die Berechtigungen, die dem benannten Berechtigungssatz Everything zugewiesen sind. Wenn der Entwickler von Assembly A Berechtigung A als optional anfordert und keine erforderlichen Berechtigungen anfordert, wird Assembly A entweder die Berechtigung A erteilt (sofern die Sicherheitsrichtlinien dies zulassen), oder ihr werden gar keine Berechtigungen erteilt.

Siehe auch

Aufgaben

Gewusst wie: Anfordern von Berechtigungen für einen benannten Berechtigungssatz

Referenz

FileIOPermission

SecurityAction.RequestMinimum

SecurityAction.RequestOptional

RequestRefuse

Konzepte

Codezugriffssicherheit

Grundlagen der Codezugriffssicherheit

Assemblymanifest

Sicherheitsberechtigungen

Anfordern von codierten XML-Berechtigungen

.NET Framework-Sicherheitsrichtlinie