Autenticación Kerberos y Reporting Services

 

Síntoma

El cliente experimenta el siguiente mensaje de error al ejecutar un informe de Reporting Services causado al conectarse a las bases de datos de SQL Server y a los cubos de SSAS desde Reporting Services.

· Error al procesar el informe. (rsProcessingAborted)

· No se puede crear una conexión al origen de datos 'DataSource1'. (rsErrorOpeningConnection)

· The connection either timed out or was lost.

· Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

· An existing connection was forcibly closed by the remote host

Al ejecutar el informe desde el servidor de Reporting Services el error no se produce.

Las credenciales usadas en el datasource del informe son Windows Integrada. Si cambiamos las credenciales de conexión al datasource por Credenciales Almancenadas, el error no se produce, ni desde el servidor de Reporting Services ni desde una máquina cliente.

Entorno:

1 máquina cliente desde donde reprocimos los mensajes de error anteriores al ejecutar un informe.

1 servidor SSRS

1 servidor SQL Server + SSAS

 

Causa

Al usar credenciales de Windows Integrada en el datasource de un informe, si ejecutamos el informe desde una máquina cliente, las credenciales del usuario harán un doble salto: pasando de la máquina cliente al servidor de Reporting Services y de este al servidor de base de datos.

Para este tipo de entornos, Reporting Services debe utilizar la autenticación Kerberos.

En este artículo se describen los diferentes pasos a seguir para configurar Kerberos en este tipo de entornos.

 

 

Configuración

1. En el archivo de configuración de rsreportserver.config (C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer) la autenticación configurada debe ser Negotiate.

<AuthenticationTypes>

<RSWindowsNegotiate/>

</AuthenticationTypes>

2. Configurar los SPNs de la cuenta de servicio de los tres servicios (SSRS,SQL SERVER y SSAS) usando la línea de comando:

setspn -s SPN dominio\CuentaDeServicio

* El comando setspn -s impide tregistrar un SPN que ya está registrados, evitando así la duplicidad de SPN para una cuenta.

* Para registrar un SPN se necesita que el usuario que lo hace sea administrador del dominio.

 

a. SPNs necesarios en Reporting Services (deben registrarse para la cuenta de servicio de SSRS).

HTTP/<hostname>

HTTP/<hostname.dominio>

donde hostname es el utilizado en las URLs de las sites de SSRS:

/reports">https://<hostname>/reports

 

b. SPNs necesarios en SQL SERVER y SSAS

(Siempre nos referimos a las base de datos utilizada por el informe y definida en su data source y en la instancia de SQL Server que aloja dicha base de datos).

 

INSTANCIAS PREDETERMINADAS

SQL SERVER (deben registrarse para la cuenta de servicio de SQLSERVER).

Si se trata de una instancia por defecto (MSSQLSERVER) que escucha en el puerto por defecto:

MSSQLSvc/<serverhostname.dominio>:1433

Para una instancia por defecto que escucha en un puerto distinto a TCP:

MSSQLSvc/<serverhostname.dominio>

SSAS (deben registrarse para la cuenta de servicio de SSAS).

Para una instancia por defecto:

MSOLAPSvc.3/serverHostName.dominio

MSOLAPSvc.3/serverHostName

INSTANCIAS CON NOMBRE

SQL SERVER (deben registrarse para la cuenta de servicio de SQLSERVER).

Para una instance nombrada que escucha en un puerto TCP

MSSQLSvc/<serverhostname.dominio>:puerto

Para una instance nombrada que escucha en un puerto distinto a TCP:

MSSQLSvc/<serverhostname.dominio>:nombredeinstancia

SSAS (deben registrarse para la cuenta de servicio de SSAS).

Para una instancia con nombre:

MSOLAPSvc.3/serverHostName.dominio:instanceName

MSOLAPSvc.3/serverHostName:instanceName

Para instancias con nombre es necesario configurar los SPNs para SQL Browser:

MOLAPDisco.3/serverHostName MOLAPDisco.3/serverHostName.dominio

 

3. Habilitar para delegación las cuentas de máquina y las cuentas de servicio requeridas en el entorno en el Directorio Activo.

a. Comprueba que la opción "Account is sensitive and cannot be delegated" para la cuenta especifica no está seleccionada (está opción se encuentra en la pestaña “Cuenta” de las propiedades de la cuenta seleccionada).

En la pestaña "Delegación" podrá configurar una de las siguientes opciones:

b. Full delegation: la cuenta se habilita para delegación para cualquier servicio.

c. Constrained delegation: la cuenta se habilita sólo para aquerllos servicios que se configuren en esta pestaña.

Más información :

Registrar un nombre principal de servicio para las conexiones con Kerberos

https://msdn.microsoft.com/es-es/library/ms191153.aspx

Cómo configurar SQL Server 2008 Analysis Services y SQL Server 2005 Analysis Services para utilizar la autenticación Kerberos

(este artículo también aplica SSAS 2008 R2)

https://support.microsoft.com/kb/917409

 

 

Si el error continua reproduciéndose...

1. Comprobar que no existan SPNs duplicados para ninguna cuenta de servicio. Esta comprobación la realizamos mediante la línea de comandos: setspn –x.

Si existe alguna lo eliminamos mediante el comando:

Setspn –d SPN dominio\cuentadeservicio

2. Si en algún momento anterior a la configuración de Kerberos hemos cambiado la cuenta de servicio de cualquiera de estos tres servicios, asegurarse de que este cambio se ha realizado mediante la consola de administración del servicio correspondiente:

* Reporting Services Configuration Manager

* SQL Server Configuration Manager.

En caso contrario, la cuenta de servicio modificada no habrá sido completamente actualizada.

3. Si los puntos 1 y 2 están comprobados habilitar los logs verbose de Kerberos en el servidor de base de datos y ver el mensaje de error en los logs de eventos de sistema.

Es importante deshabilitar los estos logs una vez reproducido el problema para no tener impacto sobre el servidor.

Cómo habilitar el registro de sucesos de Kerberos

https://support.microsoft.com/kb/262177

 

· Beatriz Sanagustín -

Ingeniero de soporte de Reporting Services