Función DsWriteAccountSpnA (ntdsapi.h)

La función DsWriteAccountSpn escribe una matriz de nombres de entidad de seguridad de servicio (SPN) en el atributo servicePrincipalName de un objeto de cuenta de usuario o equipo especificado en Servicios de dominio de Active Directory. La función puede registrar o anular el registro de los SPN.

Sintaxis

NTDSAPI DWORD DsWriteAccountSpnA(
  [in] HANDLE          hDS,
  [in] DS_SPN_WRITE_OP Operation,
  [in] LPCSTR          pszAccount,
  [in] DWORD           cSpn,
  [in] LPCSTR          *rpszSpn
);

Parámetros

[in] hDS

Contiene un identificador de servicio de directorio obtenido de la función DSBind o DSBindWithCred .

[in] Operation

Contiene uno de los valores de DS_SPN_WRITE_OP que especifica la operación que realizará DsWriteAccountSpn .

[in] pszAccount

Puntero a una cadena terminada en null constante que especifica el nombre distintivo de un usuario o objeto de equipo en Servicios de dominio de Active Directory. El autor de la llamada debe tener acceso de escritura a la propiedad servicePrincipalName de este objeto.

[in] cSpn

Especifica el número de SPN en rpszSpn. Si este valor es cero y Operation contiene DS_SPN_REPLACE_SPN_OP, la función quita todos los valores del atributo servicePrincipalName de la cuenta especificada.

[in] rpszSpn

Puntero a una matriz de cadenas terminadas en null constantes que especifican los SPN que se van a agregar o quitar de la cuenta identificada por el parámetro pszAccount . La función DsGetSpn se usa para crear SPN para un servicio.

Valor devuelto

Devuelve ERROR_SUCCESS si se ejecuta correctamente o si se produce un error de servicio de directorio o RPC win32 si no se realiza correctamente.

Comentarios

La función DsWriteAccountSpn registra los SPN para una o varias instancias de un servicio. Los clientes usan los SPN, junto con un servicio de autenticación de confianza, para autenticar el servicio. Para protegerse frente a ataques de seguridad en los que una aplicación o servicio registra fraudulentamente un SPN que identifica algún otro servicio, la DACL predeterminada en cuentas de usuario y equipo solo permite a los administradores de dominio registrar SPN en la mayoría de los casos.

Una excepción a esta regla es que un servicio que se ejecuta en la cuenta LocalSystem puede llamar a DsWriteAccountSpn para registrar un SPN simple con el formato "ServiceClass/Host:Port" si el host especificado en el SPN es el nombre DNS o NetBIOS del equipo en el que se ejecuta el servicio.

Otra excepción es que la DACL predeterminada en las cuentas de equipo permite a los llamadores registrar SPN en sí mismos, sujetos a ciertas restricciones. Por ejemplo, una cuenta de equipo puede tener SPN en relación con su nombredeequipo, con el formato "host/<nombreDeEquipo>". Dado que el nombredeequipo se encuentra en el SPN, se permite el SPN.

Ninguna de las reglas anteriores se aplica si la DSA está configurada para permitir que se escriba cualquier SPN. Sin embargo, esto reduce la seguridad, por lo que no se recomienda.

Los SPN pasados a DsWriteAccountSpn se agregan realmente al atributo Service-Principal-Name del objeto de equipo en pszAccount. Esta llamada se realiza mediante RPC al controlador de dominio donde se almacena el objeto de cuenta para que pueda aplicar de forma segura la directiva sobre qué SPN se permiten en la cuenta. No se permite el uso de LDAP para escribir directamente en la propiedad SPN; todas las escrituras deben pasar por esta llamada RPC. Se permiten lecturas mediante LDAP.

Permisos necesarios para establecer SPN

Para escribir un SPN arbitrario en una cuenta, el escritor requiere el derecho "Write ServicePrincipalName", que no se concede de forma predeterminada a la persona que creó la cuenta. Esa persona tiene el derecho "Escribir SPN validado" (presente solo en cuentas de equipo).

A continuación se muestra un resumen de los derechos por usuario en las cuentas de equipo:

Tipo de usuario Derechos
Persona que crea la cuenta Escritura de SPN validado
Operadores de cuentas Escritura de SPN y escritura de SPN validado
Usuarios autenticados None
(sí mismo) Escribir SPN validado
 

En las cuentas de usuario no hay ninguna propiedad "SPN validada" ni derecho "Escribir SPN". En su lugar, el conjunto de propiedades "Escribir información pública" concede la capacidad de crear SPN arbitrarios.

Nota

El encabezado ntdsapi.h define DsWriteAccountSpn como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado ntdsapi.h
Library Ntdsapi.lib
Archivo DLL Ntdsapi.dll

Consulte también

DS_SPN_WRITE_OP

Funciones de administración de replicación y controlador de dominio

DsBind

DsBindWithCred

DsGetSpn