Architektur der ACL-Technologie
Der System.Security.AccessControl-Namespace ermöglicht den Zugriff auf Zugriffssteuerungslisten (ACLs, Access Control Lists) über zweckmäßige Klassen, mit denen die Komplexität des Sicherheitssystems von Windows-ACLs stark verringert wird. Außerdem enthält der System.Security.AccessControl-Namespace mehrere Klassen, die erweiterten Zugriff auf das Sicherheitssystem von Windows-ACLs ermöglichen.
.NET Framework ermöglicht den Zugriff auf ACLs für die folgenden Ressourcen:
Kryptografische Schlüssel
Verzeichnisse
Ereignis-Wait-Handles
Dateien
Mutexe
Registrierungsschlüssel
Semaphoren
Jede dieser Ressourcen verfügt über mehrere Klassen, mit denen Sie ACLs erstellen und ändern können.
Hierarchie der ACL-Klassen
In den meisten Szenarien können Sie statt erweiterter Klassen abstrakte Klassen einer höheren Ebene verwenden, um ACLs zu erstellen und zu ändern. Die Klassen höherer Ebene weisen für jede Ressource folgendes Format auf:
Eine Klasse, die die freigegebene Zugriffssteuerungsliste (DACL, Discretionary Access Control List) und die Systemzugriffssteuerungsliste (SACL, System Access Control List) kapselt. Der Name dieser Klasse weist das Format <Resource Name>Security auf. Beispielsweise kapseln die FileSecurity-Klasse und die DirectorySecurity-Klasse DACLs und SACLs für Dateien und Ordner.
Eine Klasse, die einen Eintrag für die Zugriffssteuerung (ACE, Access Control Entry) kapselt. Der Name dieser Klasse weist das Format <Resource Name>AccessRule auf.
Eine Klasse, die eine Überwachungs-ACE kapselt. Der Name dieser Klasse weist das Format <Resource Name>AuditRule auf.
Verschiedene Enumerationen, mit denen Sie bestimmte Zugriffs- und Überwachungsregeln erstellen können.
Eine Liste aller ACL-Klassen höherer Ebene finden Sie unter Zusammenfassung der ACL-Technologie.
Hinzufügen von ACEs zu ACLs
Nachdem Sie mit einer der Klassen für Zugriffs- oder Überwachungsregeln einen ACE erstellt haben, können Sie einer Ressource die Regel hinzufügen oder mithilfe der ACE eine Regel aus einer Ressource entfernen. Sie können z. B. mit der FileSystemAccessRule-Klasse eine Regel erstellen, um anzugeben, dass eine Datei nur von Administratoren geöffnet werden kann. Anschließend können Sie einem FileSecurity-Objekt die Regel hinzufügen oder eine ähnliche Regel aus einem FileSecurity-Objekt entfernen.
Durch das Hinzufügen eines ACEs, der Zugriff gewährt, ist nicht gewährleistet, dass einem Prinzipal Zugriff gewährt wird, weil eine Regel zum Verweigern immer Vorrang vor einer Regel zum Gewähren hat. Wenn Sie z. B. für ein Systemkonto eine Regel zum Gewähren des Zugriffs auf eine Datei hinzufügen, bedeutet dies nicht, dass die betreffende Person auf die Datei zugreifen kann, weil der Zugriff auf die Datei möglicherweise durch eine andere Regel verweigert wird.
Jedes einer Ressource zugeordnete <Resource Name>Security-Objekt stellt die folgenden Methoden zum Hinzufügen oder Entfernen von Zugriffs- und Überwachungsregeln bereit.
Methode |
Beschreibung |
---|---|
AddAccessRule - und - AddAuditRule |
Sucht eine Zugriffs- oder Überwachungsregel, die mit der neuen Regel zusammengeführt werden kann. Wenn keine Regel gefunden wurde, wird die neue Regel hinzugefügt. |
SetAccessRule |
Entfernt alle Zugriffssteuerungsregeln, die denselben Benutzer und AccessControlType-Wert (Allow oder Deny) wie die angegebene Regel aufweisen, und fügt anschließend die angegebene Regel hinzu. |
SetAuditRule |
Entfernt unabhängig vom AuditFlags-Wert alle Überwachungsregeln, die denselben Benutzer wie die angegebene Regel aufweisen, und fügt anschließend die angegebene Regel hinzu. |
ResetAccessRule |
Entfernt unabhängig vom AccessControlType-Wert alle Zugriffssteuerungsregeln, die denselben Benutzer wie die angegebene Regel aufweisen, und fügt anschließend die angegebene Regel hinzu. |
RemoveAccessRule |
Sucht eine Zugriffssteuerungsregel, die denselben Benutzer und AccessControlType-Wert (Allow oder Deny) wie die angegebene Regel sowie kompatible Flags für Vererbung und Weitergabe aufweist. Wenn die Regel gefunden wurde, werden die Rechte in der angegebenen Zugriffsregel aus der Regel entfernt. |
RemoveAuditRule |
Sucht eine Überwachungssteuerungsregel, die denselben Benutzer wie die angegebene Regel sowie kompatible Flags für Vererbung und Weitergabe aufweist. Wenn die Regel gefunden wurde, werden die Rechte in der angegebenen Regel aus der Regel entfernt. |
RemoveAccessRuleAll |
Sucht alle Zugriffsregeln, die denselben Benutzer und AccessControlType-Wert (Allow oder Deny) wie die angegebene Regel aufweisen, und entfernt sie, sofern sie gefunden wurden. |
RemoveAuditRuleAll |
Sucht alle Überwachungsregeln, die denselben Benutzer wie die angegebene Regel aufweisen, und entfernt sie, sofern sie gefunden wurden. |
RemoveAccessRuleSpecific - und - RemoveAuditRuleSpecific |
Sucht eine Zugriffs- oder Überwachungsregel, die genau mit der angegebenen Regel übereinstimmt, und entfernt sie, sofern die Regel gefunden wurde. |
AddAccessRule - und - AddAuditRule |
Sucht eine Zugriffs- oder Überwachungsregel, die mit der neuen Regel zusammengeführt werden kann. Wenn keine Regel gefunden wurde, wird die neue Regel hinzugefügt. |
Abrufen und Festlegen von ACLs
Jede geschützte Ressource verfügt über Methoden, die das einer Ressource zugeordnete <Resource Name>Security-Objekt abrufen und festlegen. Um die für eine bestimmte Ressource vorhandenen ACLs abzurufen, verwenden Sie eine der GetAccessControl-Methoden, die der Ressource zugeordnet sind. Um Änderungen an eine Ressource zurückzuübertragen, verwenden Sie eine der SetAccesscontrol-Methoden, die der Ressource zugeordnet sind. Beachten Sie, dass Änderungen erst an eine Ressource zurückübertragen werden, wenn Sie sie mit einer der set-Methoden explizit erneut anwenden.
Eine Liste aller get- und set-Methoden für jede geschützte Ressource finden Sie unter Zusammenfassung der ACL-Technologie.