Registrar un nombre principal de servicio para las conexiones con KerberosRegister a Service Principal Name for Kerberos Connections

El uso de la autenticación Kerberos con SQL ServerSQL Server requiere que se cumplan las siguientes condiciones:To use Kerberos authentication with SQL ServerSQL Server requires both the following conditions to be true:

  • Los equipos servidor y cliente deben formar parte del mismo dominio de Windows o estar en dominios de confianza.The client and server computers must be part of the same Windows domain, or in trusted domains.

  • 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.A Service Principal Name (SPN) must be registered with Active Directory, which assumes the role of the Key Distribution Center in a Windows domain. El SPN, una vez registrado, se asigna a la cuenta de Windows que inició el servicio de la instancia de SQL ServerSQL Server .The SPN, after it is registered, maps to the Windows account that started the SQL ServerSQL Server instance service. 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.If the SPN registration has not been performed or fails, the Windows security layer cannot determine the account associated with the SPN, and Kerberos authentication will not be used.

    Nota

    Si el servidor no puede registrar automáticamente el SPN, éste se deberá registrar manualmente.If the server cannot automatically register the SPN, the SPN must be registered manually. Vea Registro manual de SPN.See Manual SPN Registration.

    Puede comprobar que una conexión está utilizando Kerberos consultando la vista de administración dinámica sys.dm_exec_connections.You can verify that a connection is using Kerberos by querying the sys.dm_exec_connections dynamic management view. Ejecute la consulta siguiente y compruebe el valor de la columna auth_scheme, que será "KERBEROS" si Kerberos está habilitado.Run the following query and check the value of the auth_scheme column, which will be "KERBEROS" if Kerberos is enabled.

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

Sugerencia

MicrosoftMicrosoft Administrador de configuración de Kerberos para SQL ServerSQL Server es una herramienta de diagnóstico que sirve para solucionar problemas de conectividad de Kerberos relacionados con SQL ServerSQL Server. MicrosoftMicrosoft Kerberos Configuration Manager for SQL ServerSQL Server is a diagnostic tool that helps troubleshoot Kerberos related connectivity issues with SQL ServerSQL Server. Para obtener más información, vea Administrador de configuración de Microsoft Kerberos para SQL Server.For more information, see Microsoft Kerberos Configuration Manager for SQL Server.

El rol del SPN en la autenticación The Role of the SPN in Authentication

Cuando una aplicación abre una conexión y usa la autenticación de Windows, SQL ServerSQL Server Native Client pasa el nombre del equipo de SQL ServerSQL Server , el nombre de instancia y, opcionalmente, un SPN.When an application opens a connection and uses Windows Authentication, SQL ServerSQL Server Native Client passes the SQL ServerSQL Server computer name, instance name and, optionally, an SPN. Si la conexión pasa un SPN, se utilizará sin ningún cambio.If the connection passes an SPN it is used without any changes.

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.If the connection does not pass an SPN, a default SPN is constructed based on the protocol used, server name, and the instance name.

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.In both of the preceding scenarios, the SPN is sent to the Key Distribution Center to obtain a security token for authenticating the connection. Si no se puede obtener un token de seguridad, la autenticación utilizará NTLM.If a security token cannot be obtained, authentication uses NTLM.

Un nombre principal de servicio (SPN) es el nombre por el que un cliente identifica de forma unívoca una instancia de un servicio.A service principal name (SPN) is the name by which a client uniquely identifies an instance of a service. El servicio de autenticación de Kerberos puede utilizar un SPN para autenticar un servicio.The Kerberos authentication service can use an SPN to authenticate a service. 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.When a client wants to connect to a service, it locates an instance of the service, composes an SPN for that instance, connects to the service, and presents the SPN for the service to authenticate.

Nota

La información proporcionada en este tema también se aplica a las configuraciones de SQL ServerSQL Server que utilizan la agrupación en clústeres.The information that is provided in this topic also applies to SQL ServerSQL Server configurations that use clustering.

El método preferido para que los usuarios se autentiquen en SQL Server es la autenticación de Windows.Windows Authentication is the preferred method for users to authenticate to SQL Server. Los clientes que usan la autenticación de Windows se autentican mediante NTLM o Kerberos.Clients that use Windows Authentication are authenticated by either using NTLM or Kerberos. En un entorno de Active Directory, se intenta utilizar siempre en primer lugar la autenticación Kerberos.In an Active Directory environment, Kerberos authentication is always attempted first. La autenticación Kerberos no está disponible para los clientes de Resultado deSQL Server 2005 mediante canalizaciones con nombre.Kerberos authentication is not available for Resultado deSQL Server 2005 clients using named pipes.

Permisos Permissions

Al iniciarse el servicio Motor de base de datosDatabase Engine , se intenta registrar el nombre principal de servicio (SPN).When the Motor de base de datosDatabase Engine service starts, it attempts to register the Service Principal Name (SPN). Si la cuenta con la que se inicia SQL Server no tiene permiso para registrar un SPN en los servicios de dominio de Active Directory, esta llamada producirá un error y se registrará un mensaje de advertencia en el registro de eventos de la aplicación así como en el registro de errores de SQL Server.If the account starting SQL Server doesn’t have permission to register a SPN in Active Directory Domain Services, this call will fail and a warning message will be logged in the Application event log as well as the SQL Server error log. Para registrar el SPN, se debe ejecutar Motor de base de datosDatabase Engine en una cuenta integrada, como Sistema local (no se recomienda) o Servicio de red, o bien, en una cuenta que tenga permiso para registrar un SPN, como la de administrador de dominio.To register the SPN, the Motor de base de datosDatabase Engine must be running under a built-in account, such as Local System (not recommended), or NETWORK SERVICE, or an account that has permission to register an SPN, such as a domain administrator account. Cuando SQL ServerSQL Server se ejecuta en el sistema operativo Windows 7Windows 7 o Windows Server 2008 R2Windows Server 2008 R2 , se puede ejecutar SQL ServerSQL Server mediante una cuenta virtual o una cuenta de servicio administrada (MSA).When SQL ServerSQL Server is running on the Windows 7Windows 7 or Windows Server 2008 R2Windows Server 2008 R2 operating system, you can run SQL ServerSQL Server using a virtual account or a managed service account (MSA). Las cuentas virtuales y las MSA pueden registrar un SPN.Both virtual accounts and MSA’s can register an SPN. Si SQL ServerSQL 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.If SQL ServerSQL Server is not running under one of these accounts, the SPN is not registered at startup and the domain administrator must register the SPN manually.

Nota

Cuando el dominio de Windows está configurado para ejecutarse en un nivel menor que el funcional de Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2, la cuenta de servicio administrada no tendrá los permisos necesarios para registrar los SPN para el servicio Motor de base de datos de SQL ServerSQL Server Database Engine .When the Windows domain is configured to run at less than the Windows Server 2008 R2Windows Server 2008 R2 Windows Server 2008 R2 functional level, then the Managed Service Account will not have the necessary permissions to register the SPNs for the Motor de base de datos de SQL ServerSQL Server Database Engine service. Si se requiere la autenticación Kerberos, el administrador de dominio debe registrar manualmente los SPN de SQL ServerSQL Server en la cuenta de servicio administrada.If Kerberos authentication is required, the Domain Administrator should manually register the SQL ServerSQL Server SPNs on the Managed Service Account.

El artículo de Knowledge Base Cómo usar la autenticación Kerberos en SQL Servercontiene información acerca de cómo conceder permisos de lectura o de escritura a un SPN para cuentas distintas de las de administrador de dominio.The KB article, How to use Kerberos authentication in SQL Server, contains information about how to grant read or write permission to an SPN for an account that is not a Domain Administrator.

Encontrará información adicional en Implementar la delegación restringida de Kerberos con SQL Server 2008Additional information is available at How to Implement Kerberos Constrained Delegation with SQL Server 2008

Formatos de SPN SPN Formats

A partir de SQL Server 2008SQL Server 2008, 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.Beginning with SQL Server 2008SQL Server 2008, the SPN format is changed in order to support Kerberos authentication on TCP/IP, named pipes, and shared memory. Los formatos de SPN admitidos para las instancias predeterminadas y con nombre son los siguientes.The supported SPN formats for named and default instances are as follows.

Instancia con nombreNamed instance

  • MSSQLSvc/FQDN:[puerto|nombreDeInstancia], donde:MSSQLSvc/FQDN:[port|instancename], where:

    • MSSQLSvc es el servicio que se va a registrar.MSSQLSvc is the service that is being registered.

    • FQDN es el nombre de dominio completo del servidor.FQDN is the fully qualified domain name of the server.

    • puerto en el número de puerto TCP.port is the TCP port number.

    • nombreDeInstancia es el nombre de la instancia de SQL ServerSQL Server .instancename is the name of the SQL ServerSQL Server instance.

    Instancia predeterminadaDefault instance

  • MSSQLSvc/FQDN:puerto|MSSQLSvc/FQDN, donde:MSSQLSvc/FQDN:port|MSSQLSvc/FQDN, where:

    • MSSQLSvc es el servicio que se va a registrar.MSSQLSvc is the service that is being registered.

    • FQDN es el nombre de dominio completo del servidor.FQDN is the fully qualified domain name of the server.

    • puerto en el número de puerto TCP.port is the TCP port number.

    El nuevo formato SPN no requiere un número de puerto.The new SPN format does not require a port number. Esto significa que un servidor con varios puertos o un protocolo que no use números de puerto puede utilizar la autenticación Kerberos.This means that a multiple-port server or a protocol that does not use port numbers can use Kerberos authentication.

Nota

En el caso de una conexión TCP/IP, en la que el puerto TCP está incluido en el SPN, SQL ServerSQL Server debe habilitar el protocolo TCP para que los usuarios puedan conectarse usando la autenticación Kerberos.In the case of a TCP/IP connection, where the TCP port is included in the SPN, SQL ServerSQL Server must enable the TCP protocol for a user to connect by using Kerberos authentication.

MSSQLSvc/fqdn:puertoMSSQLSvc/fqdn:port SPN predeterminado generado por el proveedor cuando se usa TCP.The provider-generated, default SPN when TCP is used. puerto en un número de puerto TCP.port is a TCP port number.
MSSQLSvc/fqdnMSSQLSvc/fqdn SPN predeterminado generado por el proveedor para una instancia predeterminada cuando se usa un protocolo distinto de TCP.The provider-generated, default SPN for a default instance when a protocol other than TCP is used. fqdn es un nombre de dominio completo.fqdn is a fully-qualified domain name.
MSSQLSvc/fqdn/nombreDeInstanciaMSSQLSvc/fqdn/InstanceName SPN predeterminado generado por el proveedor para una instancia con nombre cuando se usa un protocolo distinto de TCP.The provider-generated, default SPN for a named instance when a protocol other than TCP is used. nombreDeInstancia es el nombre de una instancia de SQL ServerSQL Server.InstanceName is the name of an instance of SQL ServerSQL Server.

Registro automático de SPN Automatic SPN Registration

Cuando se inicia una instancia de Motor de base de datos de SQL ServerSQL Server Database Engine , SQL ServerSQL Server intenta registrar el SPN para el servicio SQL ServerSQL Server .When an instance of the Motor de base de datos de SQL ServerSQL Server Database Engine starts, SQL ServerSQL Server tries to register the SPN for the SQL ServerSQL Server service. Cuando la instancia se detiene, SQL ServerSQL Server intenta anular el registro del SPN.When the instance is stopped, SQL ServerSQL Server tries to unregister the SPN. En una conexión TCP/IP, el SPN se registra con el formato MSSQLSvc/<FQDN>:<puertotcp>. Las instancias con nombre y la instancia predeterminada se registran como MSSQLSvc en función del valor <puertotcp> para diferenciar las instancias.For a TCP/IP connection the SPN is registered in the format MSSQLSvc/<FQDN>:<tcpport>.Both named instances and the default instance are registered as MSSQLSvc, relying on the <tcpport> value to differentiate the instances.

En el resto de conexiones compatibles con Kerberos, el SPN se registra con el formato MSSQLSvc/<FQDN>/<nombreDeInstancia> de una instancia con nombre.For other connections that support Kerberos the SPN is registered in the format MSSQLSvc/<FQDN>/<instancename> for a named instance. El formato para registrar la instancia predeterminada es MSSQLSvc/<FQDN>.The format for registering the default instance is MSSQLSvc/<FQDN>.

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.Manual intervention might be required to register or unregister the SPN if the service account lacks the permissions that are required for these actions.

Registro manual de SPN Manual SPN Registration

Para registrar el SPN manualmente, el administrador debe usar la herramienta Setspn.exe incluida en las herramientas de soporte técnico de Microsoft Windows Server 2003Windows Server 2003 .To register the SPN manually, the administrator must use the Setspn.exe tool that is provided with the Microsoft Windows Server 2003Windows Server 2003 Support Tools. Para obtener más información, vea el artículo de Knowledge Base Herramientas de soporte técnico del Service Pack 1 de Windows Server 2003 .For more information, see the Windows Server 2003 Service Pack 1 Support Tools KB article.

Setspn.exe es una herramienta de línea de comandos que le permite leer, modificar y eliminar la propiedad de directorio Nombres de la entidad de seguridad del servicio (SPN).Setspn.exe is a command line tool that enables you to read, modify, and delete the Service Principal Names (SPN) directory property. Esta herramienta también le permite ver los SPN actuales, restablecer los SPN predeterminados de la cuenta y agregar o eliminar los SPN complementarios.This tool also enables you to view the current SPNs, reset the account's default SPNs, and add or delete supplemental SPNs.

El ejemplo siguiente muestra la sintaxis usada para registrar manualmente un SPN para una conexión TCP/IP.The following example illustrates the syntax used to register manually register an SPN for a TCP/IP connection.

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

Nota : Si un SPN ya existe, se debe eliminar antes de que se pueda volver a registrar.Note If an SPN already exists, it must be deleted before it can be reregistered. Para ello, use el comando setspn junto con el modificador -D .You do this by using the setspn command together with the -D switch. Los ejemplos siguientes muestran cómo registrar manualmente un nuevo SPN basado en instancias.The following examples illustrate how to manually register a new instance-based SPN. Para una instancia predeterminada, use:For a default instance, use:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname  

Para una instancia con nombre, use:For a named instance, use:

setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname  

Conexiones de cliente Client Connections

Los SPN especificados por el usuario son compatibles con los controladores de cliente.User-specified SPNs are supported in client drivers. Sin embargo, si no se proporciona un SPN, se generará automáticamente basándose en el tipo de conexión de cliente.However, if an SPN is not provided, it will be generated automatically based on the type of a client connection. Para una conexión TCP, se usa un SPN con el formato MSSQLSvc/FQDN:[puerto] tanto para las instancias predeterminadas como para las instancias con nombre.For a TCP connection, an SPN in the format MSSQLSvc/FQDN:[port] is used for both the named and default instances.

Para las conexiones de canalización con nombre y de memoria compartida, se usa un SPN con el formato MSSQLSvc/FQDN:nombreDeInstancia para una instancia con nombre y MSSQLSvc/FQDN para la instancia predeterminada.For named pipes and shared memory connections, an SPN in the format MSSQLSvc/FQDN:instancename is used for a named instance and MSSQLSvc/FQDN is used for the default instance.

Usar una cuenta de servicio como un SPNUsing a service account as an SPN

Las cuentas de servicio se pueden usar como un SPN.Service accounts can be used as an SPN. Se especifican mediante el atributo de conexión para la autenticación Kerberos y pueden tener los formatos siguientes:They are specified through the connection attribute for the Kerberos authentication and take the following formats:

  • username@domain o dominio\nombreDeUsuario para una cuenta de usuario de dominio.username@domain or domain\username for a domain user account

  • equipo$@domain o host\FQDN de una cuenta de dominio de equipo, como Sistema local o NETWORK SERVICES.machine$@domain or host\FQDN for a computer domain account such as Local System or NETWORK SERVICES.

    Para determinar el método de autenticación de una conexión, ejecute la consulta siguiente.To determine the authentication method of a connection, execute the following query.

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

Valores predeterminados de autenticación Authentication Defaults

En la tabla siguiente se describen los valores predeterminados de autenticación que se usan basándose en los escenarios de registro de SPN.The following table describes the authentication defaults that are used based on SPN registration scenarios.

EscenarioScenario Método de autenticaciónAuthentication method
El SPN se asigna a la cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta.The SPN maps to the correct domain account, virtual account, MSA, or built-in account. Por ejemplo, Sistema local o Servicio de red.For example, Local System or NETWORK SERVICE. Las conexiones locales usan NTLM, mientras que las conexiones remotas usan Kerberos.Local connections use NTLM, remote connections use Kerberos.
El SPN es la cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta.The SPN is the correct domain account, virtual account, MSA, or built-in account. Las conexiones locales usan NTLM, mientras que las conexiones remotas usan Kerberos.Local connections use NTLM, remote connections use Kerberos.
El SPN se asigna a una cuenta de dominio, cuenta virtual, MSA o cuenta integrada incorrecta.The SPN maps to an incorrect domain account, virtual account, MSA, or built-in account Se produce un error en la autenticación.Authentication fails.
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.The SPN lookup fails or does not map to a correct domain account, virtual account, MSA, or built-in account, or is not a correct domain account, virtual account, MSA, or built-in account. Tanto las conexiones locales como las remotas usan NTLM.Local and remote connections use 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.'Correct' means that the account mapped by the registered SPN is the account that the SQL Server service is running under.

Comentarios Comments

La conexión de administrador dedicada (DAC) usa un SPN basado en el nombre de instancia.The Dedicated Administrator Connection (DAC) uses an instance name based SPN. Se puede usar la autenticación Kerberos con una DAC si se ha registrado correctamente ese SPN.Kerberos authentication can be used with a DAC if that SPN is registered successfully. Como alternativa, el usuario puede especificar el nombre de cuenta como un SPN.As an alternative a user can specify the account name as an SPN.

Si no se puede registrar el SPN durante el inicio, se indica el problema en el registro de errores de SQL ServerSQL Server y el inicio continúa.If SPN registration fails during startup, this failure is recorded in the SQL ServerSQL Server error log, and startup continues.

Si no se puede anular el registro del SPN durante el cierre, se indica el problema en el registro de errores de SQL ServerSQL Server y el cierre continúa.If SPN de-registration fails during shutdown, this failure is recorded in the SQL ServerSQL Server error log, and shutdown continues.

Vea tambiénSee Also

Compatibilidad con Nombre de entidad de seguridad de servicio (SPN) en conexiones cliente Service Principal Name (SPN) Support in Client Connections
Nombres de entidad de seguridad de servicio (SPNs) en conexiones cliente (OLE DB) Service Principal Names (SPNs) in Client Connections (OLE DB)
Nombres de entidad de seguridad de servicio (SPNs) en conexiones cliente (ODBC) Service Principal Names (SPNs) in Client Connections (ODBC)
Características de SQL Server Native Client SQL Server Native Client Features
Administrar problemas de autenticación Kerberos en un entorno de Reporting ServicesManage Kerberos Authentication Issues in a Reporting Services Environment