Sicherheitsberechtigungen

Die Common Language Runtime lässt für Code nur die Ausführung der Operationen zu, für die der Code über Berechtigungen verfügt. Die Laufzeit verwendet als Berechtigungen bezeichnete Objekte, um Einschränkungen für verwalteten Code zu erzwingen. Die Laufzeit stellt integrierte Berechtigungsklassen in verschiedenen Namespaces bereit und unterstützt darüber hinaus Entwurf und Implementierung benutzerdefinierter Berechtigungsklassen.

Es gibt zwei Arten von Berechtigungen, die jeweils einen bestimmten Zweck erfüllen:

  • Codezugriffsberechtigungen stellen den Zugriff auf eine geschützte Ressource oder die Fähigkeit zum Ausführen einer geschützten Operation dar.

  • Berechtigungen der rollenbasierten Sicherheit stellen ein Verfahren bereit, mit dem festgestellt werden kann, ob ein Benutzer bzw. ein im Namen des Benutzers handelnder Agent eine bestimmte Identität hat oder Mitglied einer bestimmten Rolle ist. PrincipalPermission ist die einzige rollenbasierte Sicherheitsberechtigung.

Sicherheitsberechtigungen können in Form einer Berechtigungsklasse (imperative Sicherheit) oder eines Attributs vorliegen, das eine Berechtigungsklasse darstellt (deklarative Sicherheit). Die Basisklasse für Sicherheitsberechtigungen ist System.Security.CodeAccessPermission, und die Basisklasse für Sicherheitsberechtigungsattribute ist System.Security.Permissions.CodeAccessSecurityAttribute.

Einer Anwendung, die in Form einer Assembly vorhanden ist, wird beim Laden in eine Anwendungsdomäne ein Berechtigungssatz gewährt. Die Berechtigungen werden in der Regel über vordefinierte Berechtigungssätze gewährt, die von der SecurityManager.GetStandardSandbox-Methode festgelegt werden. Der Berechtigungssatz bestimmt die Berechtigungen für den Code. Die Laufzeit gewährt Berechtigungen anhand des ursprünglichen Speicherorts des Codes (z. B. lokaler Computer, lokales Intranet oder Internet). Code können auch spezielle Berechtigungen erteilt werden, wenn er in einen Sandkasten geladen wird. Weitere Informationen zum Ausführen von Code in einem Sandkasten finden Sie Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einer Sandbox.

Berechtigungen werden hauptsächlich wie folgt eingesetzt:

  • Bibliothekscode kann fordern, dass der Aufrufer über bestimmte Berechtigungen verfügt. Wenn Sie einen Demand nach einer Berechtigung für Code festlegen, muss sämtlicher Code, der auf diesen Code zugreift, über die Berechtigung zur Ausführung verfügen. Mithilfe von Forderungen kann festgestellt werden, ob Aufrufer Zugriff auf bestimmte Ressourcen haben oder die Identität eines Aufrufers ermitteln können.

  • In Code können Ressourcen mithilfe von Berechtigungen vor Zugriff geschützt werden. Mit SecurityAction.PermitOnly können Sie einen eingeschränkten Berechtigungssatz festlegen und alle anderen Berechtigungen implizit verweigern. Es wird jedoch nicht empfohlen, mit PermitOnly den Zugriff zu verhindern, um Ressourcen vor beabsichtigtem Missbrauch zu schützen. Aufgerufene Assemblys, deren Berechtigungssatz die implizit verweigerten Berechtigungen enthält, können Berechtigungsverweigerungen überschreiben, indem sie für beliebige Berechtigungen, die sie verwenden möchten, SecurityAction.Assert ausführen. Wenn Sie z. B. nur UIPermission zugelassen und eine Assembly aufgerufen haben, die inhärent über FileIOPermission verfügt, kann die Assembly einfach für FileIOPermission einen Assert und anschließend Dateioperationen ausführen. Die einzige Möglichkeit, Ressourcen in Assemblys, auf die verwiesen wird, vor nicht vertrauenswürdigem Code zu schützen, besteht in der Ausführung von Code mit einem Berechtigungssatz, der diese Berechtigungen nicht enthält.

Siehe auch

Konzepte

Codezugriffsberechtigungen

Berechtigungen der rollenbasierten Sicherheit

Weitere Ressourcen

Schlüsselbegriffe der Sicherheit