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, ändern Sie die nTSecurityDescriptor-Eigenschaft des angegebenen Objekts im Eigenschaftencache. Dies bedeutet, dass Methoden für die Objekte abgelegt werden müssen, die den neuen ACE enthalten, und die IADs.SetInfo-Methode muss aufgerufen werden, 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 einen ACE für ein Zugriffsrecht zu erstellen und diesen ACE für die DACL eines Objekts festzulegen.
Abrufen eines IADs-Schnittstellenzeigers auf das -Objekt.
Verwenden Sie die IADs.Get-Methode, um den Sicherheitsdeskriptor des Objekts abzurufen. Der Name der Eigenschaft, die den Sicherheitsdeskriptor enthält, ist nTSecurityDescriptor. Die -Eigenschaft wird als VARIANT zurückgegeben, der einen IDispatch-Zeiger enthält (der vt-Member ist VT _ DISPATCH). Rufen Sie QueryInterface für diesen IDispatch-Zeiger auf, um eine IADsSecurityDescriptor-Schnittstelle abzurufen, um die Methoden für diese Schnittstelle zu verwenden, um auf die ACL des Sicherheitsdeskriptors zuzugreifen.
Verwenden Sie die IADsSecurityDescriptor.DiscretionaryAcl-Eigenschaft, um die DACL abzurufen. Die -Methode gibt einen IDispatch-Zeiger zurück. Rufen Sie QueryInterface für diesen IDispatch-Zeiger auf, um eine IADsAccessControlList-Schnittstelle abzurufen, um die Methoden für diese Schnittstelle zu verwenden, um auf die einzelnen ACEs in der Zugriffssteuerungsliste zuzugreifen.
Verwenden Sie CoCreateInstance, um das ADSI-COM-Objekt für den neuen ACE zu erstellen und einen IADsAccessControlEntry-Schnittstellenzeiger auf dieses Objekt abzurufen. Beachten Sie, dass die Klassen-ID CLSID _ AccessControlEntry lautet.
Legen Sie die Eigenschaften des ACE mithilfe der IADsAccessControlEntry-Methoden fest:
- Verwenden Sie IADsAccessControlEntry::p ut-Vertrauensnehmer, _ um den Vertrauensnehmer festzulegen, für den dieser ACE gilt. Der Vertrauensnehmer ist ein Benutzer, eine Gruppe oder ein anderer Sicherheitsprinzipal. Ihre Anwendung sollte den Wert aus der entsprechenden Eigenschaft des Benutzer- oder Gruppenobjekts des Vertrauensnehmers verwenden, auf den Sie den ACE anwenden möchten. Der Vertrauensnehmer wird als BSTR angegeben und kann folgende Formen annehmen:
- Domänenkonto (der Anmeldename, der in einer früheren Version von Windows NT verwendet wurde) im Format " < Domäne > \ ", wobei " < Domäne " der Name der Windows > NT-Domäne ist, die den Benutzer enthält, und " < Benutzerkonto " die > sAMAccountName-Eigenschaft des angegebenen Benutzers ist. Beispiel: "fabrikam \ jeffsmith".
- Ein bekannter Sicherheitsprinzipal, der spezielle Identitäten darstellt, die vom Windows NT-Sicherheitssystem definiert werden, z. B. jeder Benutzer, lokales System, Prinzipal selbst, authentifizierter Benutzer, Erstellerbesitzer usw. Die Objekte, die die bekannten Sicherheitsprinzipale darstellen, werden im Container Well Known Security Principals unterhalb des Konfigurationscontainers gespeichert. Beispiel: anonyme Anmeldung.
- Integrierte Gruppe, die die integrierten Benutzergruppen darstellt, die vom Windows NT-Sicherheitssystem definiert werden. Sie hat das Format \ "BUILTIN", 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 mithilfe der ConvertSidToStringSid-Funktion im Win32-Sicherheits-API in ein Zeichenfolgenformular konvertieren. Beispiel: "S-1-5-32-548".
- 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.
- 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 einen ACE festlegen können.
- 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 für einen ACE festlegen können.
- Verwenden Sie die IADsAccessControlEntry.Flags-Eigenschaft, um anzugeben, ob das Recht für einen bestimmten Teil des Objekts, einen geerbten Objekttyp oder beides gilt.
- Wenn Flags auf ADS FLAG OBJECT TYPE _ _ _ _ PRESENT festgelegt ist, legen Sie die IADsAccessControlEntry.ObjectType-Eigenschaft fest, und geben Sie eine Zeichenfolge mit der GUID der Objektklasse an (für ADS RIGHT _ _ DS CREATE _ _ CHILD oder ADS RIGHT _ _ DS DELETE _ _ CHILD), Eigenschaft, Eigenschaftensatz, überprüfter Schreibvorgang oder erweitertes Recht, für das der ACE gilt. Die GUID muss als Zeichenfolge des Formulars angegeben werden, das von der StringFromGUID2-Funktion in der COM-Bibliothek erstellt wird.
- 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 erstellt wird.
- Verwenden Sie IADsAccessControlEntry::p ut-Vertrauensnehmer, _ um den Vertrauensnehmer festzulegen, für den dieser ACE gilt. Der Vertrauensnehmer ist ein Benutzer, eine Gruppe oder ein anderer Sicherheitsprinzipal. Ihre Anwendung sollte den Wert aus der entsprechenden Eigenschaft des Benutzer- oder Gruppenobjekts des Vertrauensnehmers verwenden, auf den Sie den ACE anwenden möchten. Der Vertrauensnehmer wird als BSTR angegeben und kann folgende Formen annehmen:
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.
Verwenden Sie IADsAccessControlList.AddAce, um der DACL den neuen ACE hinzuzufügen. Beachten Sie, dass sich die Reihenfolge der ACEs innerhalb der Zugriffssteuerungsliste 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 in der Sicherheitsbeschreibung durch die neue ACL ersetzen. Weitere Informationen finden Sie unter Reihenfolge der ACEs in einer DACL.
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.
Verwenden Sie die IADs.Put-Methode, um den Sicherheitsdeskriptor in die nTSecurityDescriptor-Eigenschaft des Objekts in den Eigenschaftencache zu schreiben.
Verwenden Sie die IADs.SetInfo-Methode, um die -Eigenschaft für das -Objekt im Verzeichnis zu aktualisieren.