Ü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. Hierzu übergibt der Server ein Identitätswechseltoken, einen Sicherheitsdeskriptor und einen Satz angeforderter Zugriffsrechte an AccessCheck. Die Zugriffssteuerungseinträge (ACCESS Control Entries, ACEs) in der DACL des Sicherheitsdeskriptors geben die Zugriffsrechte an, die verschiedenen Vertrauenshändern erlaubt oder verweigert werden. Die AccessCheck-Funktion vergleicht den Vertrauenshänder in jedem ACE mit den Vertrauenshändern, die im Identitätswechseltoken identifiziert wurden. Eine Beschreibung des Algorithmus zum Gewähren oder Verweigern des Zugriffs 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 er Ü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 wie Eigenschaftensätze oder Eigenschaften überprüfen können. Die AccessCheckByTypeResultList- und AccessCheckByTypeResultListAndAuditAlarm-Funktionen ähneln auch AccessCheck, stellen jedoch die Ergebnisse der Zugriffsüberprüfung für jedes Unterobjekt in einer Hierarchie der Eigenschaften und Eigenschaftensätze des Objekts zur Verfügung. Diese Funktionen verwenden die OBJECT _ TYPE _ LIST-Struktur, um die Hierarchie von Objekten 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 zu überprüfende Objekt ein Verzeichnisdienstobjekt ist. Weitere Informationen zur Hierarchie eines Objekts und dessen Unterobjekten finden Sie unter ACEs zum Steuern des Zugriffs auf die Eigenschaften eines Objekts.
Die angeforderten Zugriffsrechte, die an die AccessCheck- und AccessCheckAndAuditAlarm-Funktionen ü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 angeforderte Zugriffsmaske mit einer gewährten Zugriffsmaske.
Beispielcode, der die AccessCheck-Funktion verwendet, finden Sie unter Verifying Client Access with ACLs in C++(Ü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 von vererbten ACEs ermöglicht. Dieser Sicherheitsdeskriptor enthält alle geerbten und nicht in der aktuellen Sicherheitsbeschreibung geerbten ACEs und hat das selbst relative Format. Die ConvertToAutoInheritPrivateObjectSecurity-Funktion bestimmt, ob die ACEs geerbt oder nicht übernommen werden, indem alle ACEs im aktuellen Sicherheitsdeskriptor mit allen ACEs in der übergeordneten Sicherheitsbeschreibung verglichen werden. Es gibt möglicherweise keine 1:1-Entsprechung zwischen den beiden Gruppen von ACEs. Beispielsweise 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 die aktuelle Sicherheitsbeschreibung das übergeordnete Element ist.