Partager via


Définition des droits d’accès sur un objet

Lorsque vous utilisez les objets COM ADSI IADsSecurityDescriptor (descripteur de sécurité), IADsAccessControlList (DACL et SACLs) et IADsAccessControlEntry (ACE) pour ajouter un ACE à une liste de contrôle d’accès, vous apportez des modifications à la propriété nTSecurityDescriptor de l’objet spécifié dans le cache de propriétés. Cela signifie que les méthodes de mise à jour sur les objets qui contiennent le nouvel ACE et la méthode IADs.SetInfo doivent être appelées afin d’écrire le descripteur de sécurité mis à jour dans le répertoire à partir du cache de propriétés.

Pour plus d’informations et un exemple de code qui définit un ACE sur un objet dans services de domaine Active Directory, consultez Exemple de code pour la définition d’un ACE sur un objet Directory.

Utilisez le processus général suivant pour créer un ACE pour un droit d’accès et définir ce paramètre ACE sur la LISTE de contrôle d’accès d’un objet.

  1. Obtenir un pointeur d’interface IADs vers l’objet.

  2. Utilisez la méthode IADs.Get pour obtenir le descripteur de sécurité de l’objet. Le nom de la propriété contenant le descripteur de sécurité est nTSecurityDescriptor. La propriété est retournée en tant que VARIANT contenant un pointeur IDispatch (le membre vt est VT_DISPATCH). Appelez QueryInterface sur ce pointeur IDispatch pour obtenir une interface IADsSecurityDescriptor afin d’utiliser les méthodes de cette interface pour accéder à la liste de contrôle d’accès du descripteur de sécurité.

  3. Utilisez la propriété IADsSecurityDescriptor.DiscretionaryAcl pour obtenir la liste DACL. La méthode retourne un pointeur IDispatch . Appelez QueryInterface sur ce pointeur IDispatch pour obtenir une interface IADsAccessControlList afin d’utiliser les méthodes de cette interface pour accéder aux aces individuels dans l’ACL.

  4. Utilisez CoCreateInstance pour créer l’objet COM ADSI pour le nouvel ACE et obtenir un pointeur d’interface IADsAccessControlEntry vers cet objet. N’oubliez pas que l’ID de classe est CLSID_AccessControlEntry.

  5. Définissez les propriétés de l’ACE à l’aide des méthodes IADsAccessControlEntry :

    1. Utilisez IADsAccessControlEntry::p ut_Trustee pour définir le fiduciaire auquel cette ACE s’applique. Le fiduciaire est un utilisateur, un groupe ou un autre principal de sécurité. Votre application doit utiliser la valeur de la propriété appropriée de l’objet utilisateur ou de groupe du fiduciaire auquel vous souhaitez appliquer l’ACE. Le fiduciaire est spécifié en tant que BSTR et peut prendre les formes suivantes :
      • Compte de domaine (nom d’ouverture de session utilisé dans une version précédente de Windows NT) sous la forme «< domain>\<user account> » où «< domain> » est le nom du domaine Windows NT qui contient l’utilisateur et «< user account> » est la propriété sAMAccountName de l’utilisateur spécifié. Par exemple : « fabrikam\jeffsmith ».
      • Principal de sécurité bien connu qui représente des identités spéciales définies par le système de sécurité Windows NT, telles que tout le monde, le système local, le principal lui-même, l’utilisateur authentifié, le propriétaire du créateur, etc. Les objets représentant les principaux de sécurité connus sont stockés dans le conteneur Des principaux de sécurité connus sous le conteneur Configuration. Par exemple, ouverture de session anonyme.
      • Groupe intégré qui représente les groupes d’utilisateurs intégrés définis par le système de sécurité Windows NT. Il a la forme « BUILTIN\<nom> du groupe » où «< nom> du groupe » est le nom du groupe d’utilisateurs intégré. Les objets représentant les groupes intégrés sont stockés dans le conteneur Builtin sous le conteneur de domaine. Par exemple, « BUILTIN\Administrators ».
      • SID (format de chaîne) de l’utilisateur spécifié, qui est la propriété objectSID de l’utilisateur spécifié. Vous pouvez convertir en forme de chaîne à l’aide de la fonction ConvertSidToStringSid dans le API de sécurité Win32. Par exemple : « S-1-5-32-548 ».
    2. Utilisez la propriété IADsAccessControlEntry.AccessMask pour définir le masque qui spécifie le droit d’accès. L’énumération ADS_RIGHTS_ENUM spécifie les droits d’accès que vous pouvez définir sur un objet d’annuaire.
    3. Utilisez la propriété IADsAccessControlEntry.AceType pour spécifier s’il faut autoriser ou refuser les droits d’accès définis par AccessMask. Pour les droits standard, cela peut être ADS_ACETYPE_ACCESS_ALLOWED ou ADS_ACETYPE_ACCESS_DENIED. Pour les droits spécifiques à un objet (droits qui s’appliquent à une partie spécifique d’un objet ou à un type spécifique d’objet), utilisez ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ou ADS_ACETYPE_ACCESS_DENIED_OBJECT. L’énumération ADS_ACETYPE_ENUM spécifie les types d’accès que vous pouvez définir sur un ACE.
    4. Utilisez la propriété IADsAccessControlEntry.AceFlags pour spécifier si d’autres conteneurs ou objets situés sous l’objet spécifié peuvent hériter de l’ACE. L’énumération ADS_ACEFLAG_ENUM spécifie les indicateurs d’héritage que vous pouvez définir sur un ACE.
    5. Utilisez la propriété IADsAccessControlEntry.Flags pour spécifier si le droit s’applique à une partie spécifique de l’objet, à un type d’objet hérité ou aux deux.
    6. Si Flags a la valeur ADS_FLAG_OBJECT_TYPE_PRESENT, définissez la propriété IADsAccessControlEntry.ObjectType o spécifiez une chaîne contenant le GUID de la classe d’objets (pour ADS_RIGHT_DS_CREATE_CHILD ou ADS_RIGHT_DS_DELETE_CHILD), la propriété, le jeu de propriétés, l’écriture validée ou le droit étendu auquel l’ACE s’applique. Le GUID doit être spécifié sous la forme d’une chaîne du formulaire produit par la fonction StringFromGUID2 dans la bibliothèque COM.
    7. Si Flags a la valeur ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, définissez la propriété IADsAccessControlEntry.InheritedObjectType pour spécifier une chaîne qui contient le GUID de la classe d’objets héritée à laquelle l’ACE s’applique. Le GUID doit être spécifié sous la forme d’une chaîne du formulaire produit par la fonction StringFromGUID2 dans la bibliothèque COM.
  6. Utilisez la méthode QueryInterface sur l’objet IADsAccessControlEntry pour obtenir un pointeur IDispatch . La méthode IADsAccessControlList.AddAce nécessite un pointeur d’interface IDispatch vers l’ACE.

  7. Utilisez IADsAccessControlList.AddAce pour ajouter le nouvel ACE au DACL. N’oubliez pas que l’ordre des AES dans la liste de contrôle d’accès peut affecter l’évaluation de l’accès à l’objet. L’accès correct à l’objet peut nécessiter la création d’une nouvelle liste de contrôle d’accès, l’ajout des AES de l’ACL existante dans le bon ordre à la nouvelle liste de contrôle d’accès, puis le remplacement de l’ACL existant dans le descripteur de sécurité par la nouvelle liste de contrôle d’accès. Pour plus d’informations, consultez Ordre des AIC dans une liste de contrôle d’accès.

  8. Utilisez la propriété IADsSecurityDescriptor.DiscretionaryAcl pour écrire le DACL contenant le nouvel ACE dans le descripteur de sécurité. Pour plus d’informations sur les DLL, consultez DACL Null et DACL vides.

  9. Utilisez la méthode IADs.Put pour écrire le descripteur de sécurité dans la propriété nTSecurityDescriptor de l’objet dans le cache de propriétés.

  10. Utilisez la méthode IADs.SetInfo pour mettre à jour la propriété sur l’objet dans le répertoire.