Registrar un nombre de entidad de seguridad de servicio para las conexiones con Kerberos

Se aplica a:SQL Server

Para usar la autenticación Kerberos con SQL Server se requiere el cumplimiento de las siguientes condiciones:

  • Los equipos servidor y cliente deben formar parte del mismo dominio de Windows o estar en dominios de confianza.

  • Se debe registrar un Nombre principal de servicio (SPN) en Active Directory, suponiendo que el rol del Centro de distribución de claves se encuentre en un dominio de Windows. El SPN, una vez registrado, se asigna a la cuenta de Windows que inició el servicio de la instancia de SQL Server. Si el registro del SPN no se ha realizado o ha provocado un error, el nivel de seguridad de Windows no podrá determinar la cuenta asociada al SPN y no se utilizará la autenticación Kerberos.

    Nota

    Si el servidor no puede registrar automáticamente el SPN, este se deberá registrar manualmente. Vea Registro manual de SPN.

Puede comprobar que una conexión está utilizando Kerberos consultando la vista de administración dinámica sys.dm_exec_connections. Ejecute la consulta siguiente y compruebe el valor de la columna auth_scheme, que será KERBEROS si Kerberos está habilitado.

SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

Sugerencia

Microsoft Administrador de configuración de Kerberos para SQL Server es una herramienta de diagnóstico que sirve para solucionar problemas de conectividad de Kerberos relacionados con SQL Server. Para obtener más información, vea Administrador de configuración de Microsoft Kerberos para SQL Server.

El rol del SPN en la autenticación

Cuando una aplicación abre una conexión y usa la autenticación de Windows, SQL Server Native Client pasa el nombre del equipo de SQL Server, el nombre de instancia y, opcionalmente, un SPN. Si la conexión pasa un SPN, se utilizará sin ningún cambio.

Si la conexión no pasa un SPN, se creará un SPN predeterminado basándose en el protocolo utilizado, el nombre del servidor y el nombre de instancia.

En los escenarios anteriores, el SPN se envía al Centro de distribución de claves con el fin de obtener un token de seguridad para autenticar la conexión. Si no se puede obtener un token de seguridad, la autenticación utilizará NTLM.

SPN es el nombre por el que un cliente identifica de manera unívoca una instancia de un servicio. El servicio de autenticación de Kerberos puede utilizar un SPN para autenticar un servicio. Cuando un cliente desea conectarse a un servicio, busca una instancia del servicio, compone un SPN para esa instancia, se conecta al servicio y presenta el SPN para que lo autentique el servicio.

Nota

La información proporcionada en este artículo también se aplica a las configuraciones de SQL Server que utilizan la agrupación en clústeres.

El método preferido para que los usuarios se autentiquen en SQL Server es la autenticación de Windows. Los clientes que usan la autenticación de Windows se autentican mediante NTLM o Kerberos. En un entorno de Active Directory, se intenta utilizar siempre en primer lugar la autenticación Kerberos.

Permisos

Al iniciarse el servicio Motor de base de datos, se intenta registrar el nombre principal de servicio (SPN). Supongamos que la cuenta que inicia SQL Server no tiene permiso para registrar un SPN en Active Directory Domain Services. En ese caso, se produce un error en esta llamada y se registra un mensaje de advertencia en el registro de eventos de la aplicación, así como en el registro de errores de SQL Server.

Para registrar el SPN, se debe ejecutar Motor de base de datos en una cuenta integrada, como Local System (no se recomienda) o NETWORK SERVICE, en una cuenta que tenga permiso para registrar un SPN. Puede registrar un SPN mediante una cuenta de administrador de dominio, pero no se recomienda en un entorno de producción. Puede ejecutar SQL Server mediante una cuenta virtual o una cuenta de servicio administrada (MSA). Las cuentas virtuales y las MSA pueden registrar un SPN. Si SQL Server no se ejecuta en ninguna de estas cuentas, el SPN no se registrará en el inicio y el administrador de dominio deberá hacerlo manualmente.

Formatos de SPN

El formato de SPN ha cambiado para ser compatible con la autenticación Kerberos en TCP/IP, las canalizaciones con nombre y la memoria compartida. Los formatos de SPN admitidos para las instancias predeterminadas y con nombre son los siguientes.

Instancia con nombre

  • MSSQLSvc/<FQDN>:[<puerto> | <nombreDeInstancia>], donde:

    • MSSQLSvc es el servicio que se va a registrar.
    • <FQDN> es el nombre de dominio completo del servidor.
    • <port> es el número de puerto TCP.
    • <instancename> es el nombre de la instancia de SQL Server.

Instancia predeterminada

  • MSSQLSvc/<FQDN>:<puerto> | MSSQLSvc/<FQDN>, donde:

    • MSSQLSvc es el servicio que se va a registrar.
    • <FQDN> es el nombre de dominio completo del servidor.
    • <port> es el número de puerto TCP.
Formato de SPN Descripción
MSSQLSvc/<FQDN>:<port>1 SPN predeterminado generado por el proveedor cuando se usa TCP. <port> es un número de puerto TCP.
MSSQLSvc/<FQDN> SPN predeterminado generado por el proveedor para una instancia predeterminada cuando se usa un protocolo distinto de TCP. <FQDN> es un nombre de dominio completo.
MSSQLSvc/<FQDN>:<instancename> SPN predeterminado generado por el proveedor para una instancia con nombre cuando se usa un protocolo distinto de TCP. <instancename> es el nombre de una instancia de SQL Server.

1 El nuevo formato SPN no requiere un número de puerto. Un servidor con varios puertos o un protocolo que no use números de puerto puede utilizar la autenticación Kerberos.

Para una conexión TCP/IP, en la que el puerto TCP está incluido en el SPN, SQL Server debe habilitar el protocolo TCP para que los usuarios puedan conectarse usando la autenticación Kerberos.

Registro automático de SPN

Cuando se inicia una instancia de Motor de base de datos de SQL Server , SQL Server intenta registrar el SPN para el servicio SQL Server. Cuando la instancia se detiene, SQL Server intenta anular el registro del SPN. Para una conexión TCP/IP, el SPN se registra con el formato MSSQLSvc/<FQDN>:<tcpport>. Las instancias con nombre y la instancia predeterminada se registran como MSSQLSvc, basándose en el <tcpport> valor para diferenciar las instancias.

Para el resto de conexiones compatibles con Kerberos, el SPN se registra con el formato MSSQLSvc/<FQDN>:<instancename> para una instancia con nombre. El formato para registrar la instancia predeterminada es MSSQLSvc/<FQDN>.

Para conceder permisos a la cuenta de inicio de SQL Server para registrar y modificar SPN, haga lo siguiente:

  1. En la máquina del controlador de dominio, abra Usuarios y equipos de Active Directory.

  2. Seleccione Ver > Avanzado.

  3. En Equipos, busque el equipo con SQL Server, haga clic con el botón derecho y seleccione Propiedades.

  4. Seleccione la ficha Seguridad y seleccione Opciones avanzadas.

  5. En la lista, si no aparece la cuenta de inicio de SQL Server, seleccione Añadir para añadirla. Cuando esté añadida, lleve a cabo los siguiente pasos:

    1. Seleccione la cuenta y pulse Seleccionar.

    2. En Permisos, seleccione Escritura validada de servicePrincipalName.

    3. Desplácese hacia abajo y, en Propiedades, seleccione:

      • Read servicePrincipalName
      • Write servicePrincipalName (Escribir servicePrincipalName)
    4. Seleccione Aceptar dos veces.

  6. Cierre Usuarios y equipos de Active Directory.

Es posible que se requiera una intervención manual para registrar o anular el registro del SPN si la cuenta de servicio carece de los permisos requeridos para estas acciones.

Registro manual de SPN

Para registrar el SPN manualmente, puede usar la herramienta setspn integrada en Windows. setspn.exe es una herramienta de línea de comandos que le permite leer, modificar y eliminar la propiedad de directorio Nombres de entidad de seguridad de servicio (SPN). Esta herramienta también le permite ver los SPN actuales, restablecer los SPN predeterminados de la cuenta y agregar o eliminar los SPN complementarios.

Para obtener más información sobre la herramienta setspn, los permisos necesarios y ejemplos sobre cómo usarla, consulte setspn.

El ejemplo siguiente muestra la sintaxis usada para registrar manualmente un SPN para una conexión TCP/IP mediante una cuenta de usuario de dominio:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname

Nota

Si un SPN ya existe, se debe eliminar antes de que se pueda volver a registrar. Para ello, use setspn con el conmutador -D. Los ejemplos siguientes muestran cómo registrar manualmente un nuevo SPN basado en instancias. Para una instancia predeterminada que usa una cuenta de usuario de dominio, utilice:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

Para una instancia con nombre, use:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Para más información sobre las configuraciones del grupo de disponibilidad Always On, vea Clientes de escucha y Kerberos (SPN).

Conexiones de cliente

Los SPN especificados por el usuario son compatibles con los controladores de cliente. Sin embargo, si no se proporciona un SPN, se generará automáticamente basándose en el tipo de conexión de cliente. Para una conexión TCP, se usa un SPN con el formato MSSQLSvc/FQDN:[<port>], tanto para las instancias predeterminadas como para las instancias con nombre.

Para las conexiones de canalización con nombre y de memoria compartida, se usa un SPN con el formato MSSQLSvc/<FQDN>:<instancename> para una instancia con nombre y MSSQLSvc/<FQDN> para la instancia predeterminada.

Usar una cuenta de servicio como un SPN

Las cuentas de servicio se pueden usar como un SPN. Se especifican mediante el atributo de conexión para la autenticación Kerberos y pueden tener los formatos siguientes:

  • username\@domain o domain\username para una cuenta de usuario del dominio

  • machine$\@domain o host\FQDN para una cuenta de dominio de equipo, como Local System o NETWORK SERVICE.

Para determinar el método de autenticación de una conexión, ejecute la consulta siguiente.

SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

Valores predeterminados de autenticación

En la tabla siguiente se describen los valores predeterminados de autenticación que se usan basándose en los escenarios de registro de SPN.

Escenario Método de autenticación
El SPN se asigna a la cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta. Por ejemplo, Local System o NETWORK SERVICE. Las conexiones locales usan NTLM, mientras que las conexiones remotas usan Kerberos.
El SPN es la cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta. Las conexiones locales usan NTLM, mientras que las conexiones remotas usan Kerberos.
El SPN se asigna a una cuenta de dominio, cuenta virtual, MSA o cuenta integrada incorrecta. Se produce un error en la autenticación.
Se produce un error en la búsqueda de SPN o no se asigna a una cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta, o no es una cuenta de dominio, cuenta virtual MSA o cuenta integrada correcta. Tanto las conexiones locales como las remotas usan NTLM.

Nota

En otras palabras, la cuenta asignada por el SPN registrado es la cuenta en la que se está ejecutando el servicio SQL Server.

Comentarios

La conexión de administrador dedicada (DAC) usa un SPN basado en el nombre de instancia. Se puede usar la autenticación Kerberos con una DAC si se ha registrado correctamente ese SPN. Como alternativa, el usuario puede especificar el nombre de cuenta como un SPN.

Si no se puede registrar el SPN durante el inicio, se indica el problema en el registro de errores de SQL Server y el inicio continúa.

Si no se puede anular el registro del SPN durante el apagado, se indica el problema en el registro de errores de SQL Server y el apagado continúa.

Pasos siguientes