Esta es la pregunta qué me hicieron el otro día, y qué con mis dudas sobre la mesa, me llevo a hacer pruebas de si era posible o no acceder de forma anónima a informes de Reporting Services. Ya os adelanto que no está soportado por Microsoft como podéis leer en este enlace en el que se detalla un workaround no soportado que en cualquier caso habría que probar si es válido para una integración de SSRS y SharePoint. Aún así os dejo las pruebas que hice para ver si era posible o no dicho acceso anónimo:
-
En primer lugar, crear una cuenta de ejecución de informes de SQL para no utilizar autenticación Windows. En un escenario de Reporting Services 2012 integrado con SharePoint (por medio de la correspondiente aplicación de servicio), es necesario crear dicha cuenta en cada una de las BDs asociadas a la aplicación de servicio además de en las BDs master y msdb. Por supuesto, la cuenta se tiene que añadir a la BD qué contiene los datos que mostrará el informe.
1: exec sp_droplogin @loginame='ReportExecution'
2: exec sp_addlogin @loginame='ReportExecution', @passwd='pass@word1'
3:
4: --En AdventureWorksDW
5: use AdventureWorks
6: if exists(select * from sysusers where name='ReportExecution')
7: exec sp_dropuser @name_in_db='ReportExecution'
8: exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
9:
10: --En msdb
11: use msdb
12: if exists(select * from sysusers where name='ReportExecution')
13: exec sp_dropuser @name_in_db='ReportExecution'
14: --add the users to the databases and give them permissions
15: exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
16:
17: --En ReportingService_SABD
18: use ReportingService_SABD
19: if exists(select * from sysusers where name='ReportExecution')
20: exec sp_dropuser @name_in_db='ReportExecution'
21: --add the users to the databases and give them permissions
22: exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
23:
24: --En ReportingService_SABDTempDB
25: use ReportingService_SABDTempDB
26: if exists(select * from sysusers where name='ReportExecution')
27: exec sp_dropuser @name_in_db='ReportExecution'
28: --add the users to the databases and give them permissions
29: exec sp_adduser @loginame='ReportExecution', @grpname='db_datareader'
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, «Courier New», courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-
Las BDs asociadas a la aplicación de servicio de Reporting Services son 3 en total: la que contiene las definiciones de informes, la de alertas y la BD temporal para cuestiones de procesado.
-
Crear con Report Builder 3.0 un informe en el que usemos la cuenta de ejecución de SQL qué hemos creado con el script anterior.
-
Configurar el origen de datos para que el informe use esas credenciales (pestaña Credenciales) y no las intente usar como credenciales Windows. Por supuesto, a partir de aquí crear el informe de acuerdo a los requerimientos qué tengamos establecidos.
-
Publicar el informe en la Colección de Sitios en concreto.
-
Tras realizar todos estos cambios, si accedéis al informe publicado:
-
Comprobaréis que no se visualiza y se muestra un error en la ejecución del informe.
-
Si intentáis editar el informe con Report Builder, observaréis que no es posible y qué da un error de acceso al informe dado que identifica que es un usuario anónimo el que quiere acceder a configurar el informe.
Para hacer una vuelta atrás y que el informe se pueda visualizar y editar, es necesario que quitéis el acceso anónimo tanto a nivel de aplicación web como de sitio, es decir, no es suficiente con quitarlo a nivel de sitio (o de colección de sitios).