Festlegen von Zugriffsrechten für ein Objekt

Wenn Sie die ADSI-COM-Objekte IADsSecurityDescriptor (Sicherheitsdeskriptor), IADsAccessControlList (DACLs und SACLs) und IADsAccessControlEntry (ACE) zum Hinzufügen eines ACE zu einer ACL verwenden, nehmen Sie Änderungen an der nTSecurityDescriptor-Eigenschaft des angegebenen Objekts im Eigenschaftencache vor. Dies bedeutet, dass Methoden für die Objekte, die die neue ACE-Methode enthalten, und die IADs.SetInfo-Methode aufgerufen werden müssen, um den aktualisierten Sicherheitsdeskriptor aus dem Eigenschaftencache in das Verzeichnis zu schreiben.

Weitere Informationen und ein Codebeispiel, mit dem ein ACE für ein Objekt in Active Directory Domain Services festgelegt wird, finden Sie unter Beispielcode zum Festlegen eines ACE für ein Verzeichnisobjekt.

Verwenden Sie den folgenden allgemeinen Prozess, um ein ACE für ein Zugriffsrecht zu erstellen und dieses ACE in der DACL eines Objekts festzulegen.

  1. Rufen Sie einen IADs-Schnittstellenzeiger auf das -Objekt ab.

  2. Verwenden Sie die IADs.Get-Methode , um die Sicherheitsbeschreibung des Objekts abzurufen. Der Name der Eigenschaft, die den Sicherheitsdeskriptor enthält, lautet nTSecurityDescriptor. Die Eigenschaft wird als VARIANT zurückgegeben, die einen IDispatch-Zeiger enthält (das vt-Element ist VT_DISPATCH). Rufen Sie QueryInterface auf diesem IDispatch-Zeiger auf, um eine IADsSecurityDescriptor-Schnittstelle abzurufen, um die Methoden auf dieser Schnittstelle für den Zugriff auf die ACL des Sicherheitsdeskriptors zu verwenden.

  3. Verwenden Sie die IADsSecurityDescriptor.DiscretionaryAcl-Eigenschaft , um die DACL abzurufen. Die -Methode gibt einen IDispatch-Zeiger zurück. Rufen Sie QueryInterface auf diesem IDispatch-Zeiger auf, um eine IADsAccessControlList-Schnittstelle abzurufen, um die Methoden auf dieser Schnittstelle für den Zugriff auf die einzelnen ACEs in der ACL zu verwenden.

  4. Verwenden Sie CoCreateInstance , um das ADSI-COM-Objekt für das neue ACE zu erstellen und einen IADsAccessControlEntry-Schnittstellenzeiger auf dieses Objekt abzurufen. Beachten Sie, dass die Klassen-ID CLSID_AccessControlEntry ist.

  5. Legen Sie die Eigenschaften des ACE mithilfe der IADsAccessControlEntry-Methoden fest :

    1. Verwenden Sie IADsAccessControlEntry::p ut_Trustee , um den Treuhänder festzulegen, für den dieser ACE gilt. Der Treuhänder ist ein Benutzer, eine Gruppe oder ein anderer Sicherheitsprinzipal. Ihre Anwendung sollte den Wert der entsprechenden Eigenschaft des Benutzer- oder Gruppenobjekts des Treuhänders verwenden, auf den Sie den ACE anwenden möchten. Der Treuhänder wird als BSTR angegeben und kann die folgenden Formen annehmen:
      • Domänenkonto (der Anmeldename, der in einer früheren Version von Windows NT verwendet wurde) der Form "<Domäne>\<Benutzerkonto>", wobei "<Domäne>" der Name der Windows NT-Domäne ist, die den Benutzer enthält, und "<Benutzerkonto>" die sAMAccountName-Eigenschaft des angegebenen Benutzers. Beispiel: "fabrikam\jeffsmith".
      • Bekannter Sicherheitsprinzipal, der spezielle Identitäten darstellt, die vom Windows NT-Sicherheitssystem definiert werden, z. B. jeder, lokales System, Prinzipal-Selbst, authentifizierter Benutzer, Erstellerbesitzer usw. Die Objekte, die die bekannten Sicherheitsprinzipale darstellen, werden im Container Bekannte Sicherheitsprinzipale unter dem Container Configuration gespeichert. Beispiel: anonyme Anmeldung.
      • Integrierte Gruppe, die die vom Windows NT-Sicherheitssystem definierten integrierten Benutzergruppen darstellt. Es hat das Format "BUILTIN\<group name>", wobei "<Gruppenname>" der Name der integrierten Benutzergruppe ist. Die Objekte, die die integrierten Gruppen darstellen, werden im Integrierten Container unter dem Domänencontainer gespeichert. Beispiel: "BUILTIN\Administrators".
      • SID (Zeichenfolgenformat) des angegebenen Benutzers, bei dem es sich um die objectSID-Eigenschaft des angegebenen Benutzers handelt. Sie können mit der ConvertSidToStringSid-Funktion im Win32-Sicherheits-API in Zeichenfolgenform konvertieren. Beispiel: "S-1-5-32-548".
    2. Verwenden Sie die IADsAccessControlEntry.AccessMask-Eigenschaft , um die Maske festzulegen, die das Zugriffsrecht angibt. Die ADS_RIGHTS_ENUM-Enumeration gibt die Zugriffsrechte an, die Sie für ein Verzeichnisobjekt festlegen können.
    3. Verwenden Sie die IADsAccessControlEntry.AceType-Eigenschaft , um anzugeben, ob die von AccessMask festgelegten Zugriffsrechte zugelassen oder verweigert werden sollen. Bei Standardrechten kann dies ADS_ACETYPE_ACCESS_ALLOWED oder ADS_ACETYPE_ACCESS_DENIED sein. Verwenden Sie für objektspezifische Rechte (Rechte, die für einen bestimmten Teil eines Objekts oder für einen bestimmten Objekttyp gelten) ADS_ACETYPE_ACCESS_ALLOWED_OBJECT oder ADS_ACETYPE_ACCESS_DENIED_OBJECT. Die ADS_ACETYPE_ENUM-Enumeration gibt die Zugriffstypen an, die Sie für ein ACE festlegen können.
    4. Verwenden Sie die IADsAccessControlEntry.AceFlags-Eigenschaft , um anzugeben, ob andere Container oder Objekte unter dem angegebenen Objekt den ACE erben können. Die ADS_ACEFLAG_ENUM-Enumeration gibt die Vererbungsflags an, die Sie auf einem ACE festlegen können.
    5. Verwenden Sie die IADsAccessControlEntry.Flags-Eigenschaft , um anzugeben, ob die Berechtigung für einen bestimmten Teil des Objekts, einen geerbten Objekttyp oder beides gilt.
    6. Wenn Flags auf ADS_FLAG_OBJECT_TYPE_PRESENT festgelegt ist, legen Sie die IADsAccessControlEntry.ObjectType-Eigenschaft fest, oder geben Sie eine Zeichenfolge an, die die GUID der Objektklasse (für ADS_RIGHT_DS_CREATE_CHILD oder ADS_RIGHT_DS_DELETE_CHILD), die Eigenschaft, den Eigenschaftensatz, den überprüften Schreibvorgang oder das erweiterte Recht enthält, für das der ACE gilt. Die GUID muss als Zeichenfolge des Formulars angegeben werden, das von der StringFromGUID2-Funktion in der COM-Bibliothek erzeugt wird.
    7. Wenn Flags auf ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT festgelegt ist, legen Sie die IADsAccessControlEntry.InheritedObjectType-Eigenschaft fest, um eine Zeichenfolge anzugeben, die die GUID der geerbten Objektklasse enthält, für die der ACE gilt. Die GUID muss als Zeichenfolge des Formulars angegeben werden, das von der StringFromGUID2-Funktion in der COM-Bibliothek erzeugt wird.
  6. Verwenden Sie die QueryInterface-Methode für das IADsAccessControlEntry-Objekt , um einen IDispatch-Zeiger abzurufen. Die IADsAccessControlList.AddAce-Methode erfordert einen IDispatch-Schnittstellenzeiger auf den ACE.

  7. Verwenden Sie IADsAccessControlList.AddAce , um das neue ACE zur DACL hinzuzufügen. Beachten Sie, dass sich die Reihenfolge der ACEs innerhalb der ACL auf die Auswertung des Zugriffs auf das Objekt auswirken kann. Für den richtigen Zugriff auf das Objekt müssen Sie möglicherweise eine neue ACL erstellen, die ACEs aus der vorhandenen ACL in der richtigen Reihenfolge zur neuen ACL hinzufügen und dann die vorhandene ACL im Sicherheitsdeskriptor durch die neue ACL ersetzen. Weitere Informationen finden Sie unter Reihenfolge der ACEs in einer DACL.

  8. Verwenden Sie die IADsSecurityDescriptor.DiscretionaryAcl-Eigenschaft , um die DACL mit dem neuen ACE in den Sicherheitsdeskriptor zu schreiben. Weitere Informationen zu DACLs finden Sie unter Null-DACLs und Leere DACLs.

  9. Verwenden Sie die IADs.Put-Methode , um den Sicherheitsdeskriptor in die nTSecurityDescriptor-Eigenschaft des Objekts in den Eigenschaftencache zu schreiben.

  10. Verwenden Sie die IADs.SetInfo-Methode , um die Eigenschaft für das Objekt im Verzeichnis zu aktualisieren.