Fonction DsWriteAccountSpnA (ntdsapi.h)
La fonction DsWriteAccountSpn écrit un tableau de noms de principaux de service (SPN) dans l’attribut servicePrincipalName d’un objet de compte d’utilisateur ou d’ordinateur spécifié dans services de domaine Active Directory. La fonction peut inscrire ou annuler l’inscription des noms de service.
Syntaxe
NTDSAPI DWORD DsWriteAccountSpnA(
[in] HANDLE hDS,
[in] DS_SPN_WRITE_OP Operation,
[in] LPCSTR pszAccount,
[in] DWORD cSpn,
[in] LPCSTR *rpszSpn
);
Paramètres
[in] hDS
Contient un handle de service d’annuaire obtenu à partir de la fonction DSBind ou DSBindWithCred .
[in] Operation
Contient l’une des valeurs DS_SPN_WRITE_OP qui spécifie l’opération que DsWriteAccountSpn effectuera.
[in] pszAccount
Pointeur vers une chaîne null constante qui spécifie le nom unique d’un utilisateur ou d’un objet ordinateur dans services de domaine Active Directory. L’appelant doit avoir un accès en écriture à la propriété servicePrincipalName de cet objet.
[in] cSpn
Spécifie le nombre de SPN dans rpszSpn. Si cette valeur est égale à zéro et que Operation contient DS_SPN_REPLACE_SPN_OP, la fonction supprime toutes les valeurs de l’attribut servicePrincipalName du compte spécifié.
[in] rpszSpn
Pointeur vers un tableau de chaînes null constantes qui spécifient les SPN à ajouter ou à supprimer du compte identifié par le paramètre pszAccount . La fonction DsGetSpn est utilisée pour composer des noms de service pour un service.
Valeur retournée
Retourne ERROR_SUCCESS en cas de réussite ou une erreur Win32, RPC ou service d’annuaire en cas d’échec.
Remarques
La fonction DsWriteAccountSpn inscrit les SPN pour une ou plusieurs instances d’un service. Les SPN sont utilisés par les clients, conjointement avec un service d’authentification approuvé, pour authentifier le service. Pour vous protéger contre les attaques de sécurité lorsqu’une application ou un service inscrit frauduleusement un SPN qui identifie un autre service, la liste de contrôle d’accès par défaut sur les comptes d’utilisateur et d’ordinateur permet uniquement aux administrateurs de domaine d’inscrire des noms de service dans la plupart des cas.
Une exception à cette règle est qu’un service s’exécutant sous le compte LocalSystem peut appeler DsWriteAccountSpn pour inscrire un SPN simple sous la forme « ServiceClass/Host :Port » si l’hôte spécifié dans le SPN est le nom DNS ou NetBIOS de l’ordinateur sur lequel le service s’exécute.
Une autre exception est que la liste de contrôle d’accès par défaut sur les comptes d’ordinateur permet aux appelants d’inscrire des noms de service sur eux-mêmes, sous réserve de certaines contraintes. Par exemple, un compte d’ordinateur peut avoir des noms de service par rapport à son nom d’ordinateur, sous la forme « host/<computername> ». Étant donné que le nom de l’ordinateur est contenu dans le SPN, le SPN est autorisé.
Aucune des règles ci-dessus ne s’applique si la DSA est configurée pour autoriser l’écriture d’un SPN. Toutefois, cela réduit la sécurité. Elle n’est donc pas recommandée.
Les SPN passés à DsWriteAccountSpn sont en fait ajoutés à l’attribut Service-Principal-Name de l’objet ordinateur dans pszAccount. Cet appel est effectué à l’aide de RPC vers le contrôleur de domaine où l’objet de compte est stocké afin qu’il puisse appliquer en toute sécurité une stratégie sur les noms de service autorisés sur le compte. L’utilisation de LDAP pour écrire directement dans la propriété SPN n’est pas autorisée ; toutes les écritures doivent passer par cet appel RPC. Les lectures à l’aide de LDAP sont autorisées.
Autorisations requises pour définir des noms de service
Pour écrire un SPN arbitraire sur un compte, l’enregistreur a besoin du droit « Write ServicePrincipalName », qui n’est pas accordé par défaut à la personne qui a créé le compte. Cette personne a le droit « Write validated SPN » (présent uniquement sur les comptes d’ordinateur).
Vous trouverez ci-dessous un résumé des droits par utilisateur sur les comptes d’ordinateur :
Type d’utilisateur | Droits |
---|---|
Personne qui crée le compte | Écrire un SPN validé |
Opérateurs de compte | Écrire le SPN et écrire le nom de service validé |
Utilisateurs authentifiés | None |
(auto) | Write Validated SPN |
Sur les comptes d’utilisateur, il n’y a pas de propriété « SPN validé » ni de droit « Write SPN ». Au lieu de cela, l’ensemble de propriétés « Écrire des informations publiques » accorde la possibilité de créer des NOMS de service arbitraires.
Notes
L’en-tête ntdsapi.h définit DsWriteAccountSpn comme un alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista |
Serveur minimal pris en charge | Windows Server 2008 |
Plateforme cible | Windows |
En-tête | ntdsapi.h |
Bibliothèque | Ntdsapi.lib |
DLL | Ntdsapi.dll |
Voir aussi
Fonctions de gestion du contrôleur de domaine et de la réplication