Funktionsweise von AccessCheck

Wenn ein Thread versucht, auf ein sicherungsfähiges Objekt zuzugreifen, gewährt oder verweigert das System den Zugriff. Wenn das Objekt nicht über eine daCL (Discretionary Access Control List) verfügt, gewährt das System Zugriff. Andernfalls sucht das System nach Access Control Entries (ACEs) in der DACL des Objekts, die für den Thread gelten. Jeder ACE in der DACL des Objekts gibt die Zugriffsrechte an, die für einen Treuhänder zulässig oder verweigert werden, bei denen es sich um ein Benutzerkonto, ein Gruppenkonto oder eine Anmeldesitzung handeln kann.

DACLs

Das System vergleicht den Treuhänder in jedem ACE mit den Im Zugriffstoken des Threads identifizierten Treuhändern. Ein Zugriffstoken enthält Sicherheits-IDs (SIDs), die den Benutzer und die Gruppenkonten identifizieren, zu denen der Benutzer gehört. Ein Token enthält auch eine Anmelde-SID , die die aktuelle Anmeldesitzung identifiziert. Während einer Zugriffsüberprüfung ignoriert das System Gruppen-SIDs, die nicht aktiviert sind. Weitere Informationen zu aktivierten, deaktivierten und nur verweigernden SIDs finden Sie unter SID-Attribute in einem Zugriffstoken.

In der Regel verwendet das System das primäre Zugriffstoken des Threads, der Zugriff anfordert. Wenn der Thread jedoch die Identität eines anderen Benutzers angibt, verwendet das System das Identitätswechseltoken des Threads.

Das System untersucht jeden ACE nacheinander, bis eines der folgenden Ereignisse eintritt:

  • Ein Zugriffsverweigerungs-ACE verweigert einem der im Zugriffstoken des Threads aufgeführten Treuhänder explizit alle angeforderten Zugriffsrechte .
  • Mindestens ein zugriffsberechtigtes ACEs für Treuhänder, die im Zugriffstoken des Threads aufgeführt sind, erteilen explizit alle angeforderten Zugriffsrechte.
  • Alle ACEs wurden überprüft, und es gibt immer noch mindestens ein angefordertes Zugriffsrecht, das nicht explizit zugelassen wurde. In diesem Fall wird der Zugriff implizit verweigert.

Die folgende Abbildung zeigt, wie die DACL eines Objekts den Zugriff auf einen Thread ermöglichen kann, während der Zugriff auf einen anderen verweigert wird.

dacl, das verschiedenen Threads unterschiedliche Zugriffsrechte gewährt

Für Thread A liest das System ACE 1 und verweigert sofort den Zugriff, da die zugriffsverweigerungsbasierte ACE für den Benutzer im Zugriffstoken des Threads gilt. In diesem Fall überprüft das System acEs 2 und 3 nicht. Für Thread B gilt ACE 1 nicht, sodass das System mit ACE 2 fortfährt, das Schreibzugriff ermöglicht, und ACE 3, das Lese- und Ausführungszugriff ermöglicht.

Da das System die Überprüfung von ACEs beendet, wenn der angeforderte Zugriff explizit gewährt oder verweigert wird, ist die Reihenfolge der ACEs in einer DACL wichtig. Beachten Sie, dass das System möglicherweise Zugriff auf Thread A gewährt hat, wenn die ACE-Reihenfolge im Beispiel anders war. Für Systemobjekte definiert das Betriebssystem eine bevorzugte Reihenfolge von ACEs in einer DACL.