Compatibilidad con Nombre de la entidad de seguridad del servicio (SPN) en conexiones cliente
Se aplica a: SQL Server
A partir de SQL Server 2008 (10.0.x), se ha ampliado la compatibilidad con los nombres de entidad de seguridad de servicio (SPN) para habilitar la autenticación mutua en todos los protocolos. En versiones anteriores de SQL Server, los SPN solo se admitían en Kerberos sobre TCP, cuando el SPN predeterminado para la instancia de SQL Server se registraba en Active Directory.
El protocolo de autenticación usa los SPN para determinar la cuenta en la que se ejecuta una instancia de SQL Server. Si se conoce la cuenta de la instancia, la autenticación Kerberos puede usarse para proporcionar una autenticación mutua del cliente y el servidor. Si se desconoce la cuenta de la instancia, se usa la autenticación NTLM, que solo proporciona autenticación del cliente por parte del servidor. Actualmente, OLE DB Driver for SQL Server realiza la búsqueda de autenticación y deriva el SPN de las propiedades de conexión de red y nombre de instancia. Las instancias de SQL Server intentarán registrar los SPN al inicio, o bien pueden registrarse manualmente. No obstante, se producirá un error en el registro si no hay suficientes derechos de acceso para la cuenta que intenta registrar los SPN.
Las cuentas de dominio y equipo se registran automáticamente en Active Directory. Estas cuentas se pueden usar como SPN, o bien los administradores pueden definir SPN propios. SQL Server hace que la autenticación segura sea más fácil de administrar y más confiable, ya que permite a los clientes especificar directamente el SPN que va a usarse.
Nota
Un SPN especificado por una aplicación cliente solamente se utiliza cuando se establece una conexión con la seguridad integrada de Windows.
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.
Para obtener más información acerca de Kerberos, vea los siguientes artículos:
Uso
En la tabla siguiente se describen los escenarios más comunes en los que las aplicaciones cliente pueden habilitar la autenticación segura.
Escenario | Descripción |
---|---|
Una aplicación heredada no especifica ningún SPN. | Este escenario de compatibilidad garantiza que no habrá ningún cambio de comportamiento en las aplicaciones desarrolladas para versiones anteriores de SQL Server. Si no se especifica ningún SPN, la aplicación se basa en los SPN generados y no tiene ningún conocimiento del método de autenticación utilizado. |
Una aplicación cliente que usa la versión actual del controlador OLE DB para SQL Server especifica un SPN en la cadena de conexión como un usuario de dominio o cuenta de equipo, como un SPN específico de la instancia o como una cadena definida por el usuario. | La palabra clave ServerSPN se puede usar en una cadena de conexión, inicialización o proveedor para especificar los valores siguientes: - Especificar la cuenta usada por la instancia de SQL Server para una conexión. Este valor simplifica el acceso a la autenticación Kerberos. Si hay presente un centro de distribución de claves Kerberos (KDC) y se especifica la cuenta correcta, es más probable que se use la autenticación Kerberos que la autenticación NTLM. El KDC se encuentra normalmente en el mismo equipo que el controlador de dominio. - Especificar un SPN para buscar la cuenta de servicio para la instancia de SQL Server. Por cada instancia de SQL Server, se generan dos SPN predeterminados que pueden usarse para este propósito. Pero no se garantiza que estas claves estén presentes en Active Directory, por lo que en esta situación no se garantiza la autenticación Kerberos. - Especificar un SPN que se usará para buscar la cuenta de servicio para la instancia de SQL Server. Este valor puede ser cualquier cadena definida por el usuario que se asigne a la cuenta de servicio. En este caso, la clave debe registrarse manualmente en el KDC y debe cumplir las reglas de un SPN definido por el usuario. La palabra clave FailoverPartnerSPN puede usarse para especificar el SPN para el servidor del asociado de conmutación por error. El intervalo de valores de cuenta y de clave de Active Directory es el mismo que los valores que pueden especificarse para el servidor principal. |
Una aplicación OLE DB especifica un SPN como una propiedad de inicialización del origen de datos para el servidor principal o para un servidor del asociado de conmutación por error. | La propiedad de conexión SSPROP_INIT_SERVER_SPN del conjunto de propiedades DBPROPSET_SQLSERVERDBINIT puede usarse para especificar el SPN de una conexión. La propiedad de conexión SSPROP_INIT_FAILOVER_PARTNER_SPN de DBPROPSET_SQLSERVERDBINIT puede usarse para especificar el SPN para el servidor del asociado de conmutación por error. |
El usuario especifica un SPN para un servidor o servidor de asociado de conmutación por error en un cuadro de diálogo Vínculo de datos o Inicio de sesión de OLE DB. | El SPN puede especificarse en un cuadro de diálogo Vínculo de datos o Inicio de sesión . |
Una aplicación OLE DB determina el método de autenticación que se usa para establecer una conexión. | Cuando una conexión se ha abierto correctamente, una aplicación puede consultar la propiedad de conexión SSPROP_AUTHENTICATION_METHOD en el conjunto de propiedades DBPROPSET_SQLSERVERDATASOURCEINFO para determinar qué método de autenticación se ha utilizado. Entre los valores se incluyen NTLM y Kerberos. |
Conmutación por error
Los SPN no se almacenan en la caché de conmutación por error y, por tanto, no se pueden pasar entre conexiones. Los SPN se usarán en todos los intentos de conexión a la entidad de seguridad y al asociado cuando se especifiquen en los atributos de cadena de conexión o atributos de conexión.
Agrupar conexiones
Las aplicaciones deben tener en cuenta que especificar los SPN en algunas cadenas de conexión, pero no en todas, pueden contribuir a la fragmentación del grupo.
Las aplicaciones pueden especificar los SPN mediante programación como atributos de conexión, en lugar de especificar las palabras clave de cadena de conexión. Este método puede facilitar la administración de la fragmentación del grupo de conexiones.
Las aplicaciones deben tener en cuenta que los SPN de las cadenas de conexión pueden invalidarse estableciendo los atributos de conexión correspondientes, pero las cadenas de conexión utilizadas por la agrupación de conexiones usarán los valores de las cadenas de conexión para los propósitos de agrupación.
Comportamiento de un servidor de nivel inferior
El nuevo comportamiento de conexión lo implementa el cliente; por tanto, no es específico de una versión de SQL Server.
Servidores vinculados y delegación
Cuando se crean servidores vinculados, el parámetro @provstr de sp_addlinkedserver puede usarse para especificar los SPN del servidor y del asociado de conmutación por error. Las ventajas de este método son las mismas que al especificar SPN en las cadenas de conexión del cliente: resulta más sencillo y confiable establecer conexiones que usan la autenticación Kerberos.
La delegación con servidores vinculados requiere la autenticación Kerberos.
Aspectos de la administración de los SPN especificados por aplicaciones
A la hora de decidir si se especifican SPN en una aplicación (por medio de cadenas de conexión) o mediante programación con propiedades de conexión (en lugar de confiar en los SPN generados por el proveedor predeterminado), tenga en cuenta los factores siguientes:
Seguridad: ¿el SPN especificado revela información protegida?
Confiabilidad: para habilitar el uso de los SPN predeterminados, la cuenta de servicio donde se ejecuta la instancia de SQL Server necesita tener privilegios suficientes para actualizar Active Directory en el KDC.
Comodidad y transparencia de ubicación: ¿cómo afectará a los SPN de una aplicación que su base de datos se mueva a una instancia distinta de SQL Server ? Este concepto se aplica tanto al servidor principal como a su asociado de conmutación por error si se usa la creación de reflejo de la base de datos. Si un servidor cambia, ¿significa que deben modificarse los SPN?, ¿cómo afectará esto a las aplicaciones?, ¿se administrarán los cambios?
Especificar el SPN
Un SPN puede especificarse en cuadros de diálogo y en el código. En esta sección se muestra cómo especificar un SPN.
La longitud máxima de un SPN es de 260 caracteres.
La sintaxis que usan los SPN en los atributos de cadena de conexión o atributos de conexión es la siguiente:
Sintaxis | Descripción |
---|---|
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:port | SPN predeterminado generado por el proveedor cuando se usa TCP. puerto en un número de puerto TCP. |
MSSQLSvc/fqdn:InstanceName | SPN predeterminado generado por el proveedor para una instancia con nombre cuando se usa un protocolo distinto de TCP. InstanceName es un nombre de instancia de SQL Server. |
HOST/fqdn HOST/MachineName |
SPN que se asigna a las cuentas de equipo integradas que Windows registra automáticamente. |
Username@Domain | Especificación directa de una cuenta de dominio. Username es un nombre de cuenta de usuario de Windows. Domain es un nombre de dominio de Windows o un nombre de dominio completo. |
MachineName$@Domain | Especificación directa de una cuenta de equipo. (Si el servidor al que se conecta se ejecuta en las cuentas LOCAL SYSTEM o NETWORK SERVICE, para obtener la autenticación Kerberos, ServerSPN puede tener el formato NombreDeLaMáquina$@Dominio). |
KDCKey/MachineName | SPN especificado por el usuario. KDCKey es una cadena alfanumérica que se ajusta a las reglas de una clave KDC. |
Sintaxis de OLE DB compatible con los SPN
Para obtener información específica de la sintaxis, vea los artículos siguientes:
Consulte también
Controlador OLE DB para las características de SQL Server
Registrar un nombre principal de servicio para las conexiones con Kerberos