Cómo utilizar la autenticación Kerberos en SQL Server

Resumen

Nota: Para configurar el equipo de SQL Server para las conexiones autenticadas de Kerberos en las versiones más recientes de SQL Server, vea los temas siguientes:

Uso de la autenticación Kerberos con SQL Server

Registrar un nombre principal de servicio

Si experimenta problemas al utilizar conexiones de Kerberos, puede utilizar la herramienta Administrador de configuración de Kerberos, como se describe en la entrada de blog MSDN siguiente:

Administrador de configuración de Kerberos
Puede utilizar la autenticación Kerberos con Microsoft SQL Server 2000. SQL Server 2000 admite esta funcionalidad como parte de una instalación típica de dominio de Microsoft Windows 2000 o Microsoft Windows Server 2003 Active Directory. Con Microsoft Windows 2000 Service Pack 3 (SP3) y Windows Server 2003, puede habilitar la autenticación Kerberos en clústeres de servidores.

Para obtener más información acerca de esta funcionalidad agregada, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
235529 compatibilidad con Kerberos en clústeres de servidor basado en Windows 2000


Nota: Puede utilizar esta funcionalidad sólo si está ejecutando Windows 2000 SP3 o Windows Server 2003.

Organización por clústeres de conmutación por error de SQL Server 2000 también utiliza esta funcionalidad. Cuando el recurso nombre de red que dependen de SQL Server está en un clúster basado en Windows 2000, puede utilizar la autenticación Kerberos en el recurso después de actualizar el equipo a Windows 2000 SP3 o Windows Server 2003. Para instalar clústeres de conmutación por error de SQL Server, debe tener Microsoft SQL Server 2000 Enterprise Edition o Developer Edition instalado.

Nota: Los conceptos y las discusiones en este artículo se aplican a SQL Server 2000 también se aplican a SQL Server 2005. Para obtener más información acerca de este tema en SQL Server 2005, consulte los siguientes temas en libros en pantalla de SQL Server 2005:
  • Cómo: habilitar la autenticación Kerberos como servidores virtuales de SQL Server en clústeres de servidores
  • Registro de nombre Principal de servicio
Para obtener más información acerca de cómo asegurarse de que está utilizando la autenticación Kerberos en SQL Server 2005, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

909801 cómo asegurarse de que está utilizando la autenticación Kerberos cuando crea una conexión remota a una instancia de SQL Server 2005

Más información

SQL Server puede utilizar la autenticación Kerberos para clústeres de servidores. Puede utilizar la autenticación Kerberos con equipos independientes que ejecutan SQL Server, o con instancias de SQL Server que se ejecutan en un servidor virtual.

Conectarse a un servidor que está ejecutando Microsoft Internet Information Services y realizar una conexión Kerberos en SQL Server 2000

Esta sección describe cómo conectarse a un servidor que está ejecutando Microsoft Internet Information Services (IIS) para realizar una conexión de Kerberos en un servidor que está ejecutando SQL Server.

Nota antes de realizar el procedimiento de instalación, descargue el Kerbtray y las utilidades de SetSPN.

Para descargar la utilidad Kerbtray, visite el siguiente sitio Web de Microsoft:Con Kerbtray.exe, fácilmente puede comprobar o quitar (o ambos) vales de Kerberos desde cualquiera de los equipos asociados que están usando.


Para descargar la herramienta SetSPN, visite el siguiente sitio Web de Microsoft:

El procedimiento siguiente proporciona un ejemplo de una secuencia de instalación que utilice la autenticación Kerberos a través de una página IIS para tener acceso a un servidor que está ejecutando SQL Server.

Paso 1: Configurar el controlador de dominio

En un controlador de dominio en Active Directory Users and Computers:
  1. Haga clic en el equipo que desea configurar para la delegación (servidor de servicios de IIS) y, a continuación, haga clic para seleccionar Confiar en este equipo para la delegación. Si el equipo que ejecuta SQL Server es lo que parece ser el último equipo contactado pero que el equipo tiene un servidor vinculado, debe también conceder permisos de delegación. Si no es el último equipo de la cadena, todos los equipos que son intermediarios deben ser de confianza para la delegación.
  2. Conceder permiso de delegación para la cuenta de usuario de dominio de cuenta de SQL Server servicio. Debe tener una cuenta de usuario de dominio para las instalaciones agrupadas de SQL Server (este paso no es necesario para los equipos que ejecutan SQL Server que están utilizando una cuenta de sistema local):
    1. En la carpeta usuarios , haga clic en la cuenta de usuario y, a continuación, haga clic en Propiedades.
    2. En el cuadro de diálogo Propiedades de cuenta de usuario, haga clic en el
      Ficha de cuenta .
    3. En Opciones de cuenta, haga clic para seleccionar la cuenta es de confianza para delegación casilla de verificación. Asegúrese de que está desactivada la casilla de verificación de la cuenta es importante y no se puede delegar para esta cuenta.

      Nota: El derecho 'Se confía para delegación' es necesario para la cuenta de servicio de SQL Server sólo cuando va a delegar las credenciales del servidor SQL de destino a un servidor SQL remoto como en un escenario de doble salto como consultas distribuidas (consultas de servidor vinculadas) que utilizan la autenticación de Windows.
    Nota: Estos pasos sólo se aplican a Windows 2000 Server. Si está utilizando Windows Server 2003, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
  3. Utilice la utilidad Kerbtray.exe para comprobar que se han recibido los vales de Kerberos desde el controlador de dominio y el host:
    1. Haga clic en el icono de Kerbtray en el área de notificación y, a continuación, haga clic en Purgar los vales.
    2. Espere a que el icono de Kerbtray verde cambiar de verde a amarillo. En cuanto esto ocurre, abra una ventana del símbolo del sistema y ejecute este comando:
      comando net session * / d
      Esto colocar las sesiones existentes y forzar una nueva sesión de establecerse y recibe un vale de Kerberos.

Paso 2: Configurar el servidor de servicios IIS

  1. Reemplazar los archivos del sitio Web Wwwroot predeterminado con los archivos .asp de ejemplo. Para crear los archivos .asp de ejemplo, utilice el código que se proporciona en la sección "Secuencia de comandos de recuperación de datos de SQL Server de prueba de ASP".
  2. Agregar el archivo a la carpeta Wwwroot. Para ello, utilice el código de ejemplo en la sección "ASP prueba secuencia de comandos de SQL Server recuperación de datos". Guarde el archivo como Default.asp.
  3. Volver a configurar el servidor Web para utilizar sólo autenticación de Windows integrada:
    1. (Ratón) en el servidor Web predeterminado y, a continuación, haga clic en la carpeta seguridad.
    2. En la carpeta seguridad, realizar los cambios adecuados y, a continuación, haga clic para desactivar el acceso anónimo.
    3. Desde un símbolo del sistema, ejecute este comando:
      cscript C:\Inetpub\Adminscripts\adsutil.vbs get w3svc/NTAuthenticationProviders
      Si se habilita la negociación , se devuelve lo siguiente:
       NTAuthenticationProviders : (STRING) Negotiate,NTLM 
      Para obtener más información, haga clic en el siguiente número de artículo para verlo en Microsoft Knowledge Base:

      215383 cómo configurar IIS para admitir el protocolo Kerberos y el protocolo NTLM para la autenticación de red

    Notas:
    • Debe instalar Microsoft Data Access (MDAC) 2.6 o posterior, en el servidor de servicios de IIS. Para hacerlo (y para disponer de las herramientas de pruebas), instalar las herramientas de cliente de SQL Server 2000 en el servidor Web. Para instalar sólo MDAC 2.6 o posterior (sin instalar las herramientas de cliente), visite el siguiente sitio Web de Microsoft:
    • IIS es un sistema de nivel intermedio común. Sin embargo, IIS no es el sistema de nivel medio sólo. Si IIS no está en el sistema de nivel intermedio en su entorno, siga los pasos apropiados para su sistema de nivel intermedio.
  4. Compruebe que el valor HKLM\SW\MS\MSSQLSERVER\Client\DSQUERYestá presente en el registro. Si no se muestra el valor, agregarlo como
    DSQUERY:Reg_SZ:DBNETLIB.
  5. Utilice la utilidad Kerbtray.exe para comprobar que se han recibido los vales de Kerberos desde el controlador de dominio y el host:
    1. Haga clic en el icono de Kerbtray en el área de notificación y, a continuación, haga clic en Purgar los vales.
    2. Espere a que el icono de Kerbtray verde cambiar de verde a amarillo. En cuanto esto ocurre, abra una ventana del símbolo del sistema y ejecute este comando:
      comando net session * / d
      Esto colocar las sesiones existentes y forzar una nueva sesión de establecerse y recibe un vale de Kerberos.

Paso 3: Configurar el servicio de SQL Server para crear SPN dinámicamente

Para ello, debe conceder los siguientes ajustes de control de acceso para la cuenta de servicio de SQL Server en el servicio de directorio de Active Directory:
  • Leer nombrePrincipalDeServicio
  • Escribir nombrePrincipalDeServicio
Advertencias
  • Si utiliza el complemento Edición de Interfaces del servicio Active Directory (ADSI), la utilidad LDP o los clientes LDAP 3 y modifica incorrectamente los atributos de los objetos de Active Directory, se producen problemas graves. Para resolver estos problemas, tendrá que volver a instalar Microsoft Exchange 2000 Server o Microsoft Exchange Server 2003. En algunos casos, tendrá que volver a instalar Microsoft Windows 2000 Server o Microsoft Windows Server 2003 y, a continuación, vuelva a instalar Exchange 2000 Server o Exchange Server 2003. No podemos garantizar que estos problemas se pueden resolver. Modifique estos atributos bajo su propio riesgo.
  • Debe ser iniciado sesión como administrador del dominio. Como alternativa, debe pedir a su administrador de dominio para conceder los permisos adecuados y derechos de usuario adecuados para la cuenta de inicio de SQL Server.
Para configurar el servicio de SQL Server para crear SPN dinámicamente cuando se inicia el servicio de SQL Server, siga estos pasos:
  1. Haga clic en Inicio, haga clic en Ejecutar, escriba Adsiedit.mscy, a continuación, haga clic en Aceptar.

    Nota: La herramienta ADSIEdit se incluye en las herramientas de soporte de Windows. Para obtener las herramientas de soporte de Windows, visite el siguiente sitio Web de Microsoft:
  2. Complemento la edición de ADSI, expanda el dominio [nombreDeDominio], DC = nombreDeDominioRaíz, expanda CN = Users, haga CN = nombreCuenta y, a continuación, haga clic en Propiedades.

    Notas:
    • NombreDeDominio es un marcador de posición para el nombre del dominio.
    • NombreDeDominioRaíz es un marcador de posición para el nombre del dominio raíz.
    • Nombre de cuenta es un marcador de posición para la cuenta que especifique para iniciar el servicio SQL Server.
    • Si especifica la cuenta de sistema Local para iniciar el servicio SQL Server, nombre de cuenta es un marcador de posición para la cuenta que utilice para iniciar sesión en Microsoft Windows.
    • Si especifica una cuenta de usuario de dominio para iniciar el servicio SQL Server, nombre de cuenta es un marcador de posición para la cuenta de usuario de dominio.
  3. En la CN = nombreCuenta propiedades diálogo cuadro, haga clic en la ficha seguridad .
  4. En la ficha seguridad , haga clic en Opciones avanzadas.
  5. En el cuadro de diálogo Configuración de seguridad avanzada , asegúrese de que uno mismo aparece en entradas de permisos.

    Si SELF no aparece, haga clic en Agregary, a continuación, agregue uno mismo.
  6. En las entradas de permisos, haga clic en automáticoy, a continuación, haga clic en Editar.
  7. En el cuadro de diálogo Entrada de permiso , haga clic en la ficha Propiedades .
  8. En la ficha Propiedades , haga clic en sólo este objeto en la lista Aplicar en y, a continuación, haga clic para activar las casillas de verificación para los permisos siguientes en los permisos:
    • Leer nombrePrincipalDeServicio
    • Escribir nombrePrincipalDeServicio
  9. Haga clic en Aceptar dos veces.

    Nota: Para obtener ayuda con este proceso, póngase en contacto con el soporte técnico de Active Directory y mencione este artículo de Microsoft Knowledge Base.

    Nota: Para utilizar la herramienta dsacls para determinar si la cuenta self tiene el permiso Escribir ServicePrincipalName, utilice el comando dsacls . La sintaxis es la siguiente:
    dsacls <distinguished_Name_of_service_account>
    Si la cuenta self tiene el permiso Escribir ServicePrincipalName, verá el siguiente resultado:
    Allow NT Authority\SELF SPECIAL ACCESS for Validated Write to Service principal nameWRITE PROPERTY
    La herramienta dsacls forma parte de las herramientas de soporte.
  10. En la CN = nombreCuenta propiedades diálogo cuadro, haga clic en Editor de atributos.
  11. Bajo atributos, haga clic en servicePrincipalName en la columna de atributos y, a continuación, haga clic en Editar.
  12. En el cuadro de diálogo Editor de cadenas multivalor , quite los nombres principales de servicio (SPN) para las instancias de SQL Server que utilice esta cuenta de servicio de SQL Server.

    Advertencia: Sólo debe eliminar los SPN para las instancias de SQL Server que están trabajando actualmente. Las otras instancias de SQL Server que utilice esta cuenta de servicio podrá quitar los SPN que están relacionados con estas instancias, la próxima vez que inicie estas instancias.
  13. Salga del complemento Edición de ADSI.
Después de seguir estos pasos, también se eliminan los problemas SPN si cambia el puerto TCP/IP o el nombre de dominio para las nuevas instalaciones de SQL Server 2005 o para las instancias existentes de SQL Server 2005.

Importante: Le recomendamos que no conceda WriteServicePrincipalName a la cuenta de servicio SQL cuando se cumplen las condiciones siguientes:
  • Hay varios controladores de dominio.
  • SQL Server está agrupado.
En este escenario, lo SPN para el SQL Server puede ser eliminado debido a la latencia de replicación de Active Directory. Esto puede causar problemas de conectividad a la instancia de SQL Server.

Suponga que tiene lo siguiente:
  • Una instancia virtual de SQL denominada Sqlcluster con dos nodos: el nodo A y nodo B.
  • A controlador de dominio autentica el nodo A y nodo B es autenticado por el controlador de dominio B.


Puede ocurrir lo siguiente:
  1. La instancia Sqlcluster está activa en el nodo A y registrado el SPN de SQL en un controlador de dominio durante el inicio de...
  2. La instancia Sqlcluster conmuta por error al nodo B al nodo A está apagado normalmente.
  3. La instancia Sqlcluster borrarse del registro su nombre SPN de un controlador de dominio durante el proceso de apagado en el nodo A.
  4. El SPN se quita de un controlador de dominio, pero el cambio todavía no se ha replicado en el controlador de dominio B.
  5. Cuando se inicia en el nodo B, la instancia Sqlcluster intenta registrar el SPN de SQL con el controlador de dominio B. Desde entonces, el SPN aún existe el nodo B no registra el SPN.
  6. Después de algún tiempo, el controlador de dominio A replica la eliminación del SPN (desde el paso 3) para el controlador de dominio B como parte de la replicación de Active Directory. El resultado final es que no existe ningún SPN válido para la instancia SQL en el dominio y, por tanto, verá los problemas de conexión a la instancia Sqlcluster.

Nota: Este problema se corrigió en SQL Server 2012.


Paso 4: Configurar los equipos cliente

  1. Para cada cliente que se conectará, compruebe que Microsoft Internet Explorer está configurado para utilizar autenticación de Windows:
    1. En Internet Explorer, en el menú Herramientas , haga clic en Opciones de Internet.
    2. Haga clic en la ficha Opciones avanzadas.
    3. En seguridad, haga clic para seleccionar
      Habilitar autenticación integrada de Windows (requiere reinicio)y, a continuación, haga clic en Aceptar.

Paso 5: Probar la configuración

Para cada equipo que interviene:
  1. Inicie sesión en el equipo y, a continuación, utilice Kerbtray.exe para comprobar que el equipo puede obtener un vale Kerberos válido desde el controlador de dominio.
  2. Utilice Kerbtray.exe para quitar todas las entradas en el equipo.
  3. Crear y conectarse a la página Web que devuelve los datos de SQL Server.

    Nota: Reemplace NOMBREDESERVIDORSQL con el nombre del equipo que está ejecutando SQL Server:
    • Si se devuelven datos, esta página muestra el tipo de autenticación Negotiatey los datos de SQL Server para el resultado de la sp_helpdb procedimiento almacenan que debe devolver una lista de las bases de datos en el servidor que se está conectando a través del. Página ASP.
    • Si tienes auditoría activada en SQL Server, en el registro de aplicación se verá que la conexión es de "confianza".

Secuencia de comandos de prueba ASP para recuperar datos de SQL Server

Aquí es un script de prueba ASP para los datos de SQL Server. Si utiliza este código de ejemplo, asegúrese de reemplazar
SQLSERVERNAME con el nombre del equipo que está ejecutando SQL Server.
<%@ Language=VBScript %><HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%="'auth_user' is" & request.servervariables("auth_user")%>
<P>
<%="'auth_type' is" & request.servervariables("auth_type")%>
<P>
Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>
<P>
<%
set rs = Server.CreateObject("ADODB.Recordset")
set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"
rs.open "MASTER..sp_helpdb",cn
Response.Write cstr(rs.Fields.Count) +"<BR>"
while not rs.EOF
Response.Write cstr(rs(0))+"<BR>"
rs.MoveNext
wend
rs.Close
cn.Close
set rs = nothing ' Frees memory reserved by the recordset.
set cn = nothing ' Frees memory reserved by the connection.
%>
</BODY>
</HTML>

Cómo recopilar una lista de información del nombre de principio de servidor de Active Directory

Para obtener una lista de información de nombre principal (SPN) de servidor de Active Directory, escriba el siguiente comando en uno de los controladores de dominio, donde betaland es el nombre de dominio NetBIOS y
NewoutputUsers.txt es el nombre del archivo de salida que se va a utilizar para los resultados de puerto. Si no utiliza una ruta de acceso completa, el archivo se coloca en la carpeta actual donde se ejecuta la línea de comandos. Este comando muestra consultas todo el dominio:
LDIFDE -d "CN = Users, DC =betaland" servicePrincipalName -l -F
NewoutputUsers.txt
Esta sintaxis crea un archivo denominado NewoutputUsers.txt que contiene información que es similar a la salida en la sección "Salida nivel dominio de NewouputUsers.txt" en este artículo.

Este resultado puede ser abrumadora cuando se reúnen para todo un dominio. Por lo tanto, para limitar la información recopilada a un nombre de usuario específico, utilice la sintaxis siguiente, donde
Nombre de usuario es el nombre de usuario y
betaland es el dominio que se está consultando:
LDIFDE -d "CN =Nombre de usuario, DC =betaland" servicePrincipalName -l -F
NewoutputUsers.txt
Recopilar la información de un usuario determinado en gran medida reduce los datos que se debe realizar a través de la búsqueda. Si recopila la información para todo un dominio, buscar el nombre de usuario específico del servidor en cuestión. En el ejemplo de la salida, verá:
  • Entradas de servidores que ya no existen, pero que no se eliminan completamente de Active Directory.
  • El "Nombre de usuario" usuario tiene válido SPN información acerca de diez servidores diferentes.
Además, puede utilizar la herramienta Active Directory Service Interfaces (ADSI) para corregir las entradas de Active Directory que no son válidas.


Advertencia: Si utiliza el complemento ADSI Edit, la utilidad LDP o cualquier otro cliente LDAP versión 3 y modifica incorrectamente los atributos de los objetos de Active Directory, puede provocar problemas graves. Estos problemas pueden exigir que vuelva a instalar Microsoft Windows 2000 Server, Microsoft Windows Server 2003, Microsoft Exchange 2000 Server, Microsoft Exchange Server 2003, o tanto Windows y Exchange. Microsoft no puede garantizar que puedan resolverse los problemas que se producen si modifica incorrectamente atributos de objeto de Active Directory. Modifique estos atributos bajo su propio riesgo.

Salida de nivel de dominio de NewouputUsers.txt

dn: CN=User Name,CN=Users,DC=betalandchangetype: add
servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257
servicePrincipalName: MSSQLSvc/INST3.betaland:3616
servicePrincipalName: MSSQLSvc/INST2.betaland:3490
servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433
servicePrincipalName: MSSQLSvc/VSS1.betaland:1433
servicePrincipalName: MSSQLSvc/INST1.betaland:2536
servicePrincipalName: MSSQLSvc/INST4.betaland:3967
servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434
servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433
servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

Referencias

Para obtener más información acerca de la delegación de cuentas de seguridad, vea el tema "Delegación de cuentas de seguridad" en los libros en pantalla de SQL Server.


Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
262177 cómo habilitar el registro de sucesos de Kerberos

321708 cómo utilizar la herramienta Diagnósticos de red (Netdiag.exe) en Windows 2000

326985 cómo solucionar problemas relacionados con Kerberos en IIS

244474 cómo hacer que Kerberos use TCP en lugar de UDP en Windows Server 2003, en Windows XP y en Windows 2000

Propiedades

Id. de artículo: 319723 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios