DsWriteAccountSpnA, fonction (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 les services de domaine Active Directory. La fonction peut inscrire ou annuler l’inscription des SPN.
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
[in] Operation
Contient l’une des valeurs DS_SPN_WRITE_OP qui spécifie l’opération qui DsWriteAccountSpn effectuera.
[in] pszAccount
Pointeur vers une chaîne constante terminée par null qui spécifie le nom unique d’un objet utilisateur ou ordinateur dans les 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 Opération 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 constantes terminées par null qui spécifient les noms de principal de service à ajouter ou à supprimer du compte identifié par le paramètre pszAccount. La fonction DsGetSpn est utilisée pour composer des SPN pour un service.
Valeur de retour
Retourne ERROR_SUCCESS en cas de réussite ou d’une erreur de service d’annuaire, RPC ou Win32 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é où 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 spN dans la plupart des cas.
Une exception à cette règle est qu’un service exécuté sous le compte LocalSystem peut appeler DsWriteAccountSpn pour inscrire un SPN simple du formulaire « 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 eux-mêmes des spN, soumis à certaines contraintes. Par exemple, un compte d’ordinateur peut avoir des noms spn par rapport à son nom d’ordinateur, sous la forme « host/<computername>». Étant donné que le nom d’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. Cela réduit toutefois la sécurité. Il n’est donc pas recommandé.
Les spN passés à DsWriteAccountSpn sont effectivement ajoutés à l’attribut Service-Principal-Name de l’objet ordinateur dans pszAccount. Cet appel est effectué à l’aide du RPC vers le contrôleur de domaine où l’objet de compte est stocké afin qu’il puisse appliquer en toute sécurité la stratégie sur les noms de principal de service autorisés sur le compte. L’utilisation du protocole 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 utilisant LDAP sont autorisées.
Autorisations requises pour définir des noms de principal de service
Pour écrire un SPN arbitraire sur un compte, l’enregistreur requiert le droit « Write ServicePrincipalName », qui n’est pas accordé par défaut à la personne qui a créé le compte. Cette personne dispose du droit « SpN validé en écriture » (présent uniquement sur les comptes d’ordinateur).
Voici 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 un SPN et écrire un SPN validé |
Utilisateurs authentifiés | Aucun |
(self) | Écrire un SPN validé |
Sur les comptes d’utilisateur, il n’existe aucune propriété « SPN validé » ou « Write SPN » droit. Au lieu de cela, l’ensemble de propriétés « Écrire des informations publiques » accorde la possibilité de créer des SPN arbitraires.
Note
L’en-tête ntdsapi.h définit DsWriteAccountSpn comme 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.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows Vista |
serveur minimum pris en charge | Windows Server 2008 |
plateforme cible | Windows |
d’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