Partager via


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 DSBind ou DSBindWithCred.

[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

DS_SPN_WRITE_OP

fonctions de gestion du contrôleur de domaine et de la réplication

DsBind

DsBindWithCred

DsGetSpn