Delegieren von Organisationseinheiten
Das Unternehmen Fabrikam stellt zwei Administratoren ein, Mike und Paul, um die Organisationseinheiten Osten bzw. Westen zu verwalten. Joe delegiert seine administrativen Aufgaben an sie, damit sie Benutzer in ihren jeweiligen Organisationseinheiten erstellen und löschen können.
Bevor Sie wissen, wie Sie diese Organisationseinheiten unter Mike und Paul einrichten, müssen Sie wissen, wie Sie den Zugriff auf Objekte in Active Directory einrichten. Jedes Objekt in Active Directory verfügt über eine Sicherheitsbeschreibung. Mit dem Sicherheitsdeskriptor können Sie Berechtigungen für das Objekt ändern, Berechtigungen weitergeben, die Überwachung aktivieren usw. Die Sicherheitsbeschreibung selbst verfügt über zwei Zugriffssteuerungslisten (Access Control Lists, ACLs): eine diskretionäre ACL (DACL) und eine System-ACL (SACL). Jede ACL kann Zugriffssteuerungseinträge (ACEs) enthalten. Mit einem ACE können Sie den zulässigen oder verweigerten Zugriff auf ein Objekt festlegen. Darüber hinaus können Sie bestimmte Aktionen angeben, die zugelassen oder verweigert werden sollen. Beispiele für Aktionen sind Create Child, Delete Child, Read Property und Write Property. Diese Rechte werden mit accessMask angegeben.
Als Nächstes können Sie die Klassen oder Attribute angeben, denen dieser ACE zugeordnet ist. Im folgenden Fabrikam-Beispiel wählt Joe die Benutzerklasse aus, damit jeder Administrator Benutzer zum System hinzufügen kann. Als Nächstes müssen Sie die Frage beantworten: "Wer wird der Nutznießer dieses ACE sein?" Joe gibt Mike an.
Schließlich können Sie das ACE-Vererbungsverhalten festlegen, z. B. können ACEs angegeben werden, um die Hierarchie weiterzuverbreiten. Zusammengefasst führt das vorherige Beispiel dazu, dass Mike Benutzerobjekte unter der Organisationseinheit East Sales erstellen und löschen kann.
Joe verwendet das folgende Codebeispiel, um die ACEs und ACLs in der Organisationseinheit Osten einzurichten.
Set ou = GetObject("LDAP://OU=East, OU=Sales, DC=Fabrikam,DC=COM")
Set sec = ou.Get("ntSecurityDescriptor")
Set acl = sec.DiscretionaryAcl
Set ace = CreateObject("AccessControlEntry")
' You can also use Set ace = new ADsAccessControlEntry.
' Grant access to the object.
ace.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
' Create and delete child objects.
ace.AccessMask = ADS_RIGHT_DS_CREATE_CHILD Or ADS_RIGHT_DS_DELETE_CHILD
' Create the user object with the user schema IDGUID.
ace.ObjectType = "{BF967ABA-0DE6-11D0-A285-00AA003049E2}"
' Propagate the ACE down.
ace.AceFlags = ADS_ACEFLAG_INHERIT_ACE
' Provide an option that notifies that the objectType is filled.
ace.Flags = ADS_FLAG_OBJECT_TYPE_PRESENT
' Show the beneficiary of this ACE.
ace.Trustee = "FABRIKAM\Mike"
acl.AddAce ace
sec.DiscretionaryAcl = acl
ou.Put "ntSecurityDescriptor", Array(sec)
' Use SetInfo to commit the data to Active Directory.
ou.SetInfo
' Release the objects.
Set ace = Nothing
Set acl = Nothing
Set sec = Nothing
Die folgende Abbildung zeigt das Active Directory-Menü Neue Ansicht erstellen , nachdem der Code ausgeführt wurde. Wenn sich Joe, der Administrator, anmeldet, sieht er mehrere Klassen, die er erstellen kann. Wenn Mike sich jedoch anmeldet, kann er nur Benutzerobjekte erstellen.
Weitere Informationen finden Sie unter ADSI-Sicherheitsmodell.