none
Cómo ver los reportes sin que pida credenciales el servidor de Base de Datos? RRS feed

  • Pregunta

  • Hola a todos!!!

    Primero que nada quiero saludar a la comunidad respetuosamente y avisar que he revisado el foro para ver sí encontraba la solución a mi problema. No la encontré por lo que abro este tema.

    Tengo un informe publicado en el servidor de reportes, el servidor tiene sql server 2008 r2 y el sistema operativo es un windows server 2008 de 64 bits (el servidor sólo es de bases de datos y no tiene instalado el IIS), y trato que el informe se vea desde un pc cliente sin que pida credenciales, ya que la seguridad lo dará la plataforma donde se enganchará el link. Aunque he creado un usuario de dominio que está dentro del grupo administradores y es el usuario que usé en la administración de reporting services, continua solicitando las credenciales. He revisado en el datasource, en los grupos de usuario y permisos de sql server y no encuentro solución. Espero que alguien pueda ayudarme con este problema 

    martes, 7 de junio de 2011 16:47

Respuestas

  • No está claro quién te está pidiendo las credenciales. ¿Estás accediendo al informe a través del Report Manager y las credenciales que te pide son las necesarias para acceder a la página web del Report Manager? Si es esto, hay que añadir el usuario en dos sitios: Como usuario de reporting Services, y con permisos para acceder a la página raíz (o a la carpeta que tiene el informe). Si el PC cliente tiene Windows Vista o posterior, recuerda que no basta con crear un usuario del grupo de Administradores y dar permiso a los Administradores en Reporting Services, ya que el UAC le quita al usuario los permisos de administrador antes de conectarse.

    En cambio, si las credenciales que te está pidiendo son las de base de datos para abrir la conexión del dataset del informe, entonces lo que hay que revisar es el Origen de Datos, a ver si es que en las credenciales está marcada la opción de "pedirle las credenciales al usuario antes de emitir el informe". Si es así, cámbialo por credenciales almacenadas (o por seguridad integrada, si los usuarios tienen permisos sobre la base de datos).

     

     

    martes, 7 de junio de 2011 20:11
    Moderador

Todas las respuestas

  • No está claro quién te está pidiendo las credenciales. ¿Estás accediendo al informe a través del Report Manager y las credenciales que te pide son las necesarias para acceder a la página web del Report Manager? Si es esto, hay que añadir el usuario en dos sitios: Como usuario de reporting Services, y con permisos para acceder a la página raíz (o a la carpeta que tiene el informe). Si el PC cliente tiene Windows Vista o posterior, recuerda que no basta con crear un usuario del grupo de Administradores y dar permiso a los Administradores en Reporting Services, ya que el UAC le quita al usuario los permisos de administrador antes de conectarse.

    En cambio, si las credenciales que te está pidiendo son las de base de datos para abrir la conexión del dataset del informe, entonces lo que hay que revisar es el Origen de Datos, a ver si es que en las credenciales está marcada la opción de "pedirle las credenciales al usuario antes de emitir el informe". Si es así, cámbialo por credenciales almacenadas (o por seguridad integrada, si los usuarios tienen permisos sobre la base de datos).

     

     

    martes, 7 de junio de 2011 20:11
    Moderador
  • Hola que tal, ando buscando una solucion a mi problema y éste tema es el mas parecido a lo que ando buscando, mi problema esque desde CRM monte un Reporte como informe, pero al abrir el informe pide credenciales, cuando el usuario cliente ya esta loggeado en CRM. es SQL server 2008 con windows server 2008, espero de su ayuda. gracias y saludos.

    martes, 21 de junio de 2011 16:59
  • Marco esta pregunta como "respondida" dado que han pasado más de 20 días sin tener nuevas noticias. Si todavía persiste el problema original y deseas replantear la pregunta, por favor abre un hilo nuevo.

     

    miércoles, 29 de junio de 2011 7:09
    Moderador
  • Necesitas configurar el reporte con autenticación de windows. y listo. 

     

    Saludos.

    lunes, 24 de octubre de 2011 16:34
  • No está claro quién te está pidiendo las credenciales. ¿Estás accediendo al informe a través del Report Manager y las credenciales que te pide son las necesarias para acceder a la página web del Report Manager? Si es esto, hay que añadir el usuario en dos sitios: Como usuario de reporting Services, y con permisos para acceder a la página raíz (o a la carpeta que tiene el informe). Si el PC cliente tiene Windows Vista o posterior, recuerda que no basta con crear un usuario del grupo de Administradores y dar permiso a los Administradores en Reporting Services, ya que el UAC le quita al usuario los permisos de administrador antes de conectarse.

    En cambio, si las credenciales que te está pidiendo son las de base de datos para abrir la conexión del dataset del informe, entonces lo que hay que revisar es el Origen de Datos, a ver si es que en las credenciales está marcada la opción de "pedirle las credenciales al usuario antes de emitir el informe". Si es así, cámbialo por credenciales almacenadas (o por seguridad integrada, si los usuarios tienen permisos sobre la base de datos).

     

     

    Alberto buen día.

    Si trato de abrir la pagina web de SQL Server Reporting Services en un webBrowser, en una aplicación que ya ha sido autorizada en un logging,  me pide nuevamente credenciales desde un equipo remoto Uri("http://direccionIPservidor/Reports/report/carpetaReports/reporte"), claro que si corres en un equipo local no lo hará.

    Como podría evitar que me pida credenciales al abrir esta web desde un equipo remoto?


    saludos.

    domingo, 14 de octubre de 2018 2:41
  • Si trato de abrir la pagina web de SQL Server Reporting Services en un webBrowser, en una aplicación que ya ha sido autorizada en un logging,  me pide nuevamente credenciales

    Efectivamente, el hecho de que la aplicación ya haya pasado por el login no vale para nada desde el punto de vista de Reporting Services. La cookie de autenticación (y probablemente el método de autenticación) es distinta en tu aplicación y en SSRS, por lo que no se "comunican" entre sí.

    Una solución, si es viable en tu entorno, es configurar todo con autenticación integrada de Windows, en cuyo caso tanto la aplicación como el reporte usan las credenciales de Windows y ninguno de los dos pide autenticación.

    Si no puedes usar autenticación integrada, la otra alternativa que yo he tenido que usar alguna vez es pedir el resultado del informe desde la aplicación web al webservice de SSRS, y luego retornar una página con el resultado devuelto por el webservice. De esa forma, la autenticación en SSRS se realiza mediante las credenciales del AppPool del sitio web (que obviamente habremos autorizado en SSRS para emitir ese informe) y los usuarios nunca llegan a conectarse directamente con SSRS. Esto funciona bien no solo desde el punto de vista de las credenciales sino que además tiene la ventaja de que no hay que abrir el servidor de SSRS al acceso externo. Pero tiene el inconveniente de que solo obtienes el informe "completo" en el formato que se haya solicitado al WebService, no puedes paginar ni navegar a otros informes ni usar ninguna otra característica interactiva proporcionada por el ReportManager.

    domingo, 14 de octubre de 2018 7:45
    Moderador
  •  la otra alternativa que yo he tenido que usar alguna vez es pedir el resultado del informe desde la aplicación web al webservice de SSRS, y luego retornar una página con el resultado devuelto por el webservice. De esa forma, la autenticación en SSRS se realiza mediante las credenciales del AppPool del sitio web (que obviamente habremos autorizado en SSRS para emitir ese informe) y los usuarios nunca llegan a conectarse directamente con SSRS. Esto funciona bien no solo desde el punto de vista de las credenciales sino que además tiene la ventaja de que no hay que abrir el servidor de SSRS al acceso externo. Pero tiene el inconveniente de que solo obtienes el informe "completo" en el formato que se haya solicitado al WebService, no puedes paginar ni navegar a otros informes ni usar ninguna otra característica interactiva proporcionada por el ReportManager.

    Alberto mil gracias tu respuesta, esto me sirve!! pero, me podrías orientar mejor respecto a la alternativa por favor. Mil gracias de antemano.

    NOTA: estoy en un entorno WinForms


    saludos.

    lunes, 15 de octubre de 2018 19:16
  • Aquí te pongo un ejemplito de cómo exportar un informe pasándole un parámetro, y recogiendo el resultado como array de bytes. El ejemplo exporta a PDF pero puedes cambiarlo reemplazando el valor de la variable format.

    using Ejemplo.ServicioInformes; // Poner aquí el espacio de nombres que hayamos usado al agregar la referencia al WebService reportexecution2005.wsdl
    
    public static byte[] ExportarInforme(string codigo, out string mensaje)
    {
        mensaje = null;
    
        Ejemplo.ServicioInformes.ReportExecutionService rs = new Ejemplo.ServicioInformes.ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials; //new System.Net.NetworkCredential("Usuario", "Password");
    
        byte[] result = null;
        string reportPath = "/Carpeta/NombreInforme";
        string format = "PDF";
        string historyID = null;
        string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
    
        // Preparar parámetros del informe.
        ParameterValue[] parameters = new ParameterValue[1];
        parameters[0] = new ParameterValue();
        parameters[0].Name = "Codigo";
        parameters[0].Value = codigo;
    
        string encoding;
        string mimeType;
        string extension;
        Warning[] warnings = null;
        string[] streamIDs = null;
    
        ExecutionInfo execInfo = new ExecutionInfo();
        ExecutionHeader execHeader = new ExecutionHeader();
    
        rs.ExecutionHeaderValue = execHeader;
    
        execInfo = rs.LoadReport(reportPath, historyID);
    
        rs.SetExecutionParameters(parameters, "en-us");
        String SessionId = rs.ExecutionHeaderValue.ExecutionID;
    
        try
        {
            result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
    
            execInfo = rs.GetExecutionInfo();
        }
        catch (System.Web.Services.Protocols.SoapException ex)
        {
            //System.Diagnostics.Debug.WriteLine(ex.Detail.OuterXml);
            mensaje = "Se ha producido un error al generar el informe: " + ex.Detail.OuterXml);
        }
    
        return result;
    }
    

    • Propuesto como respuesta Jaime65 martes, 16 de octubre de 2018 5:33
    lunes, 15 de octubre de 2018 19:59
    Moderador
  • Excelente!! funciona perfecto como usuario local, e inclusive lo envié a procesar en un backgroundWorker y funciona muy bien. Tengo algo de problema con usuario remoto: cambie la linea de credenciales, pero me da un error de conexión con el servidor (execInfo = rs.LoadReport(reportPath, historyID);). Pienso que es la dirección Ip del servidor: Ejemplo: reportViewerReport.ServerReport.ReportServerUrl = new Uri("http://192.168.100.1/ReportServer/"); Que podria hacer? al poner rs.Url = "http://192.168.100.1/ReportServer/"; da una Exception= Error de la solicitud con una resuesta vacia.

    Gracias de antemano.


    saludos.


    • Editado Jaime65 martes, 16 de octubre de 2018 5:58
    martes, 16 de octubre de 2018 5:33
  • Efectivamente, el problema podría estar en la dirección del servidor, que de forma predeterminada es la misma que le pusiste al añadir la referencia web. Se puede cambiar en el fichero .config. Asegúrate de poner la dirección pública del servidor (la que sea alcanzable desde el lugar en el que estés ejecutando el código que se conecta al servidor).
    • Propuesto como respuesta Jaime65 viernes, 19 de octubre de 2018 20:35
    martes, 16 de octubre de 2018 6:54
    Moderador
  • Alberto. he concluido el código con éxito.  Muchas gracias!!

    NOTA: efectivamente para que funcione en ambiente local o remoto faltaría la linea que asigna la URL. Asi:  (rs.Url = "http://localhost/ReportServer/ReportExecution2005.asmx";) se debe reemplazar "localhost" con el nombre o dirección IP del servidor y funciona perfectamente.

    Cordial saludo.


    saludos.

    • Propuesto como respuesta Jaime65 viernes, 19 de octubre de 2018 20:34
    • Votado como útil Jaime65 viernes, 19 de octubre de 2018 20:35
    viernes, 19 de octubre de 2018 20:33