Compartir a través de


Función DsWriteAccountSpnA (ntdsapi.h)

La función DsWriteAccountSpn escribe una matriz de nombres de entidad de seguridad de servicio (SPN) en el servicePrincipalName atributo de un objeto de cuenta de usuario o equipo especificado en Active Directory Domain Services. 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 de DSBind o DSBindWithCred.

[in] Operation

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

[in] pszAccount

Puntero a una cadena terminada en NULL constante que especifica el nombre distintivo de un usuario o un objeto de equipo en Active Directory Domain Services. 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 constantes terminadas en NULL 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 componer SPN para un servicio.

Valor devuelto

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

Observaciones

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 nombre de equipo está incluido en el SPN, se permite el SPN.

Ninguna de las reglas anteriores se aplica si el DSA está configurado 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 en el 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 usar 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 cuenta Escribir SPN y escribir SPN validado
Usuarios autenticados Ninguno
(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 Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista
servidor mínimo admitido Windows Server 2008
de la plataforma de destino de Windows
encabezado de ntdsapi.h
biblioteca de Ntdsapi.lib
DLL de Ntdsapi.dll

Consulte también

DS_SPN_WRITE_OP

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

DsBind

DsBindWithCred

DsGetSpn