Überprüfen des Zugriffs auf private Objekte
Eine geschützte Serveranwendung muss die Zugriffsrechte eines Clients überprüfen, bevor der Client auf ein geschütztes privates Objekt zugreifen kann. Dazu übergibt der Server ein Identitätswechseltoken, einen Sicherheitsdeskriptor und einen Satz angeforderter Zugriffsrechte für AccessCheck. Die Zugriffssteuerungseinträge (Access Control Entries , ACEs) in der DACL des Sicherheitsdeskriptors geben die Zugriffsrechte an, die verschiedenen Treuhändern zugelassen oder verweigert werden. Die AccessCheck-Funktion vergleicht den Treuhänder in jedem ACE mit den im Identitätswechseltoken identifizierten Treuhändern. Eine Beschreibung des Algorithmus, der zum Gewähren oder Verweigern des Zugriffs verwendet wird, finden Sie unter Steuern des Zugriffs auf ein Objekt durch DACLs.
Die AccessCheckAndAuditAlarm-Funktion führt eine ähnliche Zugriffsüberprüfung durch. Darüber hinaus generiert es Überwachungsdatensätze im Sicherheitsereignisprotokoll, abhängig von der SACL im Sicherheitsdeskriptor.
Die Funktionen AccessCheckByType und AccessCheckByTypeAndAuditAlarm ähneln AccessCheck und AccessCheckAndAuditAlarm , mit der Ausnahme, dass Sie den Zugriff auf die Unterobjekte eines Objekts überprüfen können, z. B. Eigenschaftensätze oder Eigenschaften. Die Funktionen AccessCheckByTypeResultList und AccessCheckByTypeResultListAndAuditAlarm ähneln ebenfalls AccessCheck , mit der Ausnahme, dass sie die Ergebnisse der Zugriffsüberprüfung für jedes Unterobjekt in einer Hierarchie der Eigenschaften und Eigenschaftensätze des Objekts bereitstellen. Diese Funktionen verwenden die OBJECT_TYPE_LIST-Struktur , um die Hierarchie der Objekte zu beschreiben, für die der Zugriff überprüft wird. Die Funktionen, die eine Überwachungsmeldung generieren, verwenden den AUDIT_EVENT_TYPE Enumerationstyp, um anzugeben, ob das überprüfte Objekt ein Verzeichnisdienstobjekt ist. Weitere Informationen zur Hierarchie eines Objekts und seiner Unterobjekte finden Sie unter ACEs zum Steuern des Zugriffs auf die Eigenschaften eines Objekts.
Die angeforderten Zugriffsrechte, die an die Funktionen AccessCheck und AccessCheckAndAuditAlarm übergeben werden, dürfen keine generischen Zugriffsrechte enthalten. Der Server kann die MapGenericMask-Funktion verwenden, um alle generischen Zugriffsrechte gemäß der in der GENERIC_MAPPING-Struktur angegebenen Zuordnung in die entsprechenden spezifischen und Standardrechte zu konvertieren.
Die Funktionen AreAllAccessesGranted und AreAnyAccessesGranted vergleichen eine angeforderteZugriffsmaske mit einer gewährten Zugriffsmaske.
Beispielcode, der die AccessCheck-Funktion verwendet, finden Sie unter Überprüfen des Clientzugriffs mit ACLs in C++.
Die ConvertToAutoInheritPrivateObjectSecurity-Funktion erstellt und gibt einen Sicherheitsdeskriptor in einem Format zurück, das die automatische Weitergabe vererbbarer ACEs ermöglicht. Dieser Sicherheitsdeskriptor enthält alle geerbten und nicht inheritierten ACEs im aktuellen Sicherheitsdeskriptor und hat ein selbstrelatives Format. Die ConvertToAutoInheritPrivateObjectSecurity-Funktion bestimmt, ob die ACEs geerbt oder nicht inheritiert werden, indem alle ACEs im aktuellen Sicherheitsdeskriptor mit allen ACEs im übergeordneten Sicherheitsdeskriptor verglichen werden. Zwischen den beiden ACEs-Gruppen besteht möglicherweise keine 1:1-Korrespondenz. Für instance kann ein ACE, der Lese-/Schreibberechtigungen zulässt, zwei ACEs entsprechen: einem ACE, der Leseberechtigungen zulässt, und einem ACE, der Schreibberechtigungen zulässt. Ein übergeordneter Sicherheitsdeskriptor wird möglicherweise nicht angegeben, wenn der aktuelle Sicherheitsdeskriptor das übergeordnete Element ist.