Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para usar la autenticación Kerberos con SQL Server, ambas condiciones son verdaderas:
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 instancia de SQL Server. Si no se ha realizado o se produce un error en el registro de SPN, la capa de seguridad de Windows no puede determinar la cuenta asociada con el SPN y no se usará la autenticación Kerberos.
Nota:
Si el servidor no puede registrar automáticamente el SPN, el SPN debe registrarse manualmente. Vea Registro manual de SPN.
Puede comprobar que una conexión usa 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 usa sin cambios.
Si la conexión no pasa un SPN, se construye un SPN predeterminado en función del protocolo usado, el nombre del servidor y el nombre de la 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 usa 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. 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 que se proporciona en este tema también se aplica a las configuraciones de SQL Server que usan 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. La autenticación Kerberos no está disponible para los clientes de SQL Server 2005 usando canalizaciones nombradas.
Permisos
Al iniciarse el servicio Motor de base de datos, se intenta registrar el nombre principal de servicio (SPN). Si la cuenta que inicia SQL Server no tiene permiso para registrar un SPN en Active Directory Domain Services, se producirá un error en esta llamada 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. Para registrar el SPN, el motor de base de datos debe ejecutarse en una cuenta integrada, como sistema local (no recomendado), o servicio de red, o una cuenta que tenga permiso para registrar un SPN, como una cuenta de administrador de dominio. Cuando SQL Server se ejecuta en el sistema operativo Windows 7 o Windows Server 2008 R2, puede ejecutar SQL Server mediante una cuenta virtual o una cuenta de servicio administrada (MSA). Tanto las cuentas virtuales como las de MSA pueden registrar un SPN. Si SQL Server no se ejecuta en una de estas cuentas, el SPN no se registra en el inicio y el administrador del dominio debe registrar el SPN manualmente.
Nota:
Cuando el dominio de Windows está configurado para ejecutarse en menos de los niveles funcionales de Windows 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 Server. Si se requiere la autenticación Kerberos, el administrador de dominio debe registrar manualmente los SPN de SQL Server en la cuenta de servicio administrada.
El artículo de KB Sobre cómo usar la autenticación Kerberos en SQL Server contiene información sobre cómo conceder permiso de lectura o escritura a un SPN para una cuenta que no es administrador de dominio.
Hay información adicional disponible en How to Implement Kerberos Constrained Delegation with SQL Server 2008 (Cómo implementar la delegación restringida de Kerberos con SQL Server 2008).
Formatos SPN
A partir de SQL Server 2008, el formato SPN se cambia para admitir la autenticación Kerberos en TCP/IP, canalizaciones con nombre y memoria compartida. Los formatos de SPN admitidos para las instancias predeterminadas y con nombre son los siguientes.
Instancia con nombre
MSSQLSvc/FQDN:[port|instancename], donde:
MSSQLSvc es el servicio que se está registrando.
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:port|MSSQLSvc/FQDN, donde:
MSSQLSvc es el servicio que se está registrando.
FQDN es el nombre de dominio completo del servidor.
port es el número de puerto TCP.
El nuevo formato SPN no requiere un número de puerto. Esto significa que un servidor de varios puertos o un protocolo que no usa números de puerto pueden usar la autenticación Kerberos.
Nota:
En el caso de una conexión TCP/IP, donde el puerto TCP se incluye en el SPN, SQL Server debe habilitar el protocolo TCP para que un usuario se conecte mediante la autenticación Kerberos.
| MSSQLSvc/fqdn:port | SPN predeterminado generado por el proveedor cuando se usa TCP. puerto en 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. |
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 está registrado en el formato MSSQLSvc/<FQDN>:<tcpport>. Las instancias con nombre y la instancia predeterminada se registran como MSSQLSvc, basándose en el <valor tcpport> para diferenciar las instancias.
Para otras conexiones que admiten Kerberos, el SPN se registra en el formato MSSQLSvc/<FQDN>:<instancename> para una instancia con nombre. El formato para registrar la instancia predeterminada es 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.
Registro manual de SPN
Para registrar el SPN manualmente, el administrador debe usar la herramienta Setspn.exe que se proporciona con las Herramientas de soporte técnico de Microsoft Windows Server 2003. Para obtener más información, consulte el artículo KB de Windows Server 2003 Service Pack 1 sobre las herramientas de soporte técnico.
Setspn.exe es una herramienta de línea de comandos que permite leer, modificar y eliminar la propiedad del directorio Nombres Principales 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.
En el ejemplo siguiente se muestra la sintaxis utilizada para registrar manualmente un SPN para una conexión TCP/IP.
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
Nota Si ya existe un SPN, debe eliminarse antes de que se pueda volver a registrar. Para lograrlo, use el comando setspn junto con el interruptor -D. Los ejemplos siguientes muestran cómo registrar manualmente un nuevo SPN basado en instancias. Para una instancia predeterminada, use:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname
Para una instancia con nombre, use:
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname
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 en función del tipo de una conexión de cliente. Para una conexión TCP, se utiliza un SPN en el formato MSSQLSvc/FQDN:[port] tanto para las instancias con nombre como para las predeterminadas.
Para canalizaciones con nombre y conexiones de memoria compartida, se usa un SPN con el formatoFQDN:instancename de MSSQLSvc/ para una instancia con nombre y elFQDN de MSSQLSvc/ para la instancia predeterminada.
Uso de una cuenta de servicio como SPN
Las cuentas de servicio se pueden usar como un SPN. Se especifican a través del atributo de conexión para la autenticación Kerberos y toman los siguientes formatos:
username@domain o dominio\nombre de usuario para una cuenta de usuario de dominio
machine$@domain o host\FQDN para una cuenta de dominio de equipo como Sistema local o NETWORK SERVICES.
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 en función de 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, Sistema local o SERVICIO NETWORK. Nota: Correcto significa que la cuenta asignada por el SPN registrado es la cuenta en la que se ejecuta el servicio SQL Server. |
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. Nota: Correcto significa que la cuenta asignada por el SPN registrado es la cuenta bajo la cual se ejecuta el servicio SQL Server. |
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 correcta, cuenta virtual, MSA o cuenta integrada, o no es una cuenta de dominio, cuenta virtual, MSA o cuenta integrada correcta. | Tanto las conexiones locales como las remotas usan NTLM. |
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 se produce un error en el desregistro de SPN al apagar, este error se registra en el registro de errores de SQL Server y el apagado continúa.
Véase también
Compatibilidad con Nombre de la entidad de seguridad de servicio (SPN) en conexiones cliente
Nombres de entidad de seguridad de servicio (SPN) en conexiones cliente (OLE DB)
Nombres de entidad de seguridad del servicio (SPN) en conexiones de cliente (ODBC)
Características de SQL Server Native Client
Administrar problemas de autenticación Kerberos en un entorno de Reporting Services