Partager via


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

DS_SPN_WRITE_OP

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

DsBind

DsBindWithCred

DsGetSpn