Ejemplo de extensión de seguridad

Actualizado: 5 de diciembre de 2005

La extensión de seguridad de ejemplo CustomSecurity usa autenticación de formularios junto con SQL Server para proporcionar un modelo de seguridad personalizado que funcione con Reporting Services. Este ejemplo no es compatible con los sistemas operativos basados en Itanium.

Los ejemplos de SQL Server no se instalan de forma automática durante la instalación. Para obtener instrucciones acerca de la instalación de los ejemplos, vea el artículo sobre la instalación de los ejemplos.

ms160724.security(es-es,SQL.90).gifNota de seguridad:
El ejemplo de extensión de seguridad no debe implementarse ni probarse en un entorno de producción. Por lo general no se recomienda volver a la autenticación de Windows después de migrar a una extensión de seguridad diferente. De hacerlo, se pueden producir errores al intentar obtener acceso a elementos de la base de datos del servidor de informes que tengan descriptores de seguridad personalizados, pero no descriptores de seguridad de autenticación de Windows. Para volver a la autenticación de Windows, tendrá que reinstalar Reporting Services y volver a aplicar manualmente la seguridad basada en funciones para los usuarios de Windows. Antes de usar este ejemplo, debe realizar copias de seguridad de sus archivos de configuración.
ms160724.note(es-es,SQL.90).gifImportante:
Los ejemplos se proporcionan exclusivamente con fines formativos. No se han diseñado para utilizarse en un entorno de producción y no se han probado en este tipo de entorno. Microsoft no ofrece soporte técnico para estos ejemplos. Las aplicaciones y los ensamblados de ejemplo no se deben conectar ni usar con la base de datos de SQL Server de producción ni con el servidor de informes sin el permiso del administrador del sistema.

Requisitos

Para usar el ejemplo CustomSecurity, debe saber usar Visual Studio y también Visual C# o Visual Basic, y debe tener instaladas las aplicaciones siguientes:

  • Microsoft Visual Studio 2005 o un entorno de desarrollo compatible (para ver los archivos del proyecto).
  • Microsoft .NET Framework versión 2.0.
  • SQL Server 2005, incluido Reporting Services.
  • Los ejemplos de Reporting Services.
  • Un servidor de informes para el que disponga de permisos de acceso en la red, si piensa utilizar la extensión de ejemplo para agregar funcionalidad de procesamiento de datos adicional al servidor.

Ubicación

Este ejemplo se encuentra de forma predeterminada en el subdirectorio Extension Samples\FormsAuthentication Sample del directorio de ejemplos de Reporting Services:

C:\Program Files\Microsoft SQL Server\90\Samples\Reporting Services\Extension Samples\FormsAuthentication Sample

Generar el ejemplo

Primero debe compilar e instalar la extensión. A efectos del procedimiento se da por sentado que se ha instalado Reporting Services en la ubicación predeterminada: C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services. Se hará referencia a esta ubicación en el resto de este tema como <instalación>.

Si aún no ha creado un archivo de clave de nombre seguro, genere este archivo mediante las siguientes instrucciones.

Para generar un archivo de clave de nombre seguro

  1. Abra un símbolo del sistema de Microsoft Visual Studio 2005. Haga clic en Inicio, seleccione Todos los programas, Microsoft .NET Framework SDK 2.0 y, a continuación, haga clic en Símbolo del sistema de SDK.

    -- O bien --

    Abra un símbolo del sistema de Microsoft .NET Framework. Haga clic en Inicio, seleccione Todos los programas, Microsoft .NET Framework SDK 2.0 y, a continuación, haga clic en Símbolo del sistema de SDK.

  2. Use el comando de cambio de directorio (CD) para cambiar el directorio actual a la carpeta donde están instalados los ejemplos.

    [!NOTA] para determinar la carpeta donde se encuentran los ejemplos, haga clic en el botón Inicio, seleccione Todos los programas, Microsoft SQL Server, Documentación y tutoriales y, a continuación, haga clic en el directorio Ejemplos. Si se usó la ubicación de instalación predeterminada, los ejemplos se encontrarán en <unidadDeSistema>:\Archivos de programa\Microsoft SQL Server\100\Ejemplos.

  3. En el símbolo del sistema, ejecute el comando siguiente para generar el archivo de clave:

    sn -k SampleKey.snk

    ms160724.note(es-es,SQL.90).gifImportante:
    Para obtener más información acerca del par de claves de nombre seguro, vea el apartado sobre informes de seguridad de nombres seguros y seguridad en .NET Framework en el centro de desarrollo de .NET de MSDN.

Para compilar el ejemplo mediante Visual Studio 2005

  1. Abra CustomSecurity.sln en Microsoft Visual Studio 2005. Si ha instalado el ejemplo en la ubicación predeterminada, puede obtener acceso a él en C:\Archivos de programa\Microsoft SQL Server\MSSQL\Reporting Services\Samples\Extensions.

  2. En el Explorador de soluciones, seleccione el proyecto CustomSecurity.

  3. En el menú Proyecto, haga clic en Agregar referencia.

    Se abre el cuadro de diálogo Agregar referencias.

  4. Haga clic en la ficha .NET.

  5. Haga clic en Examinar y busque Microsoft.ReportingServices.Interfaces en la unidad local. De forma predeterminada, el ensamblado se encuentra en el directorio <instalación>\ReportServer\bin. Haga clic en Aceptar.

    La referencia seleccionada se agrega al proyecto.

  6. En el menú Generar, haga clic en Generar solución.

Implementar el ejemplo

Una vez que se ha compilado el ejemplo, debe copiar las DLL y las páginas ASPX en los subdirectorios correspondientes de la instalación del Servidor de informes.

Para implementar el ejemplo

  1. Copie Microsoft.Samples.ReportingServices.CustomSecurity.dll y Microsoft.Samples.ReportingServices.CustomSecurity.pdb en el directorio <instalación>\ReportServer\bin.

  2. Copie Microsoft.Samples.ReportingServices.CustomSecurity.dll y Microsoft.Samples.ReportingServices.CustomSecurity.pdb en el directorio <instalación>\ReportManager\bin.

  3. Copie la página Logon.aspx en el directorio <instalación>\ReportServer y copie la página UILogon.aspx en el directorio <instalación>\ReportManager\Pages.

Una vez que se han copiado las páginas del ensamblado y de inicio de sesión en el servidor, debe realizar algunas modificaciones en los archivos de configuración del Servidor de informes y del Administrador de informes.

ms160724.note(es-es,SQL.90).gifImportante:
Realice copias de seguridad de todos sus archivos de configuración antes de realizar cambios.

Para modificar el archivo RSReportServer.config

  1. Abra el archivo RSReportServer.config con Visual Studio 2005 o un editor de texto sencillo, como el Bloc de notas. RSReportServer.config se encuentra en el directorio <instalación>\ReportServer.

  2. Busque los elementos <Security> y <Authentication> y modifique la configuración de este modo:

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    <Authentication>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.AuthenticationExtension,
     Microsoft.Samples.ReportingServices.CustomSecurity" />
    </Authentication>
    

    Para obtener más información relativa a la seguridad de .NET Framework y Reporting Services, vea Understanding Code Access Security in Reporting Services.

Para modificar el archivo RSWebApplication.config

  1. A continuación, debe abrir el archivo de configuración del Administrador de informes, RSWebApplication.config, ubicado en el directorio <instalación>\ReportManager.

  2. Ubique el elemento <UI> y actualícelo de este modo:

    <UI>
       <CustomAuthenticationUI>
          <loginUrl>/Pages/UILogon.aspx</loginUrl>
             <UseSSL>True</UseSSL>
       </CustomAuthenticationUI>
       <ReportServerUrl>http://<server>/ReportServer</ReportServerUrl>
    </UI>
    

[!NOTA] Si está ejecutando la extensión de seguridad de ejemplo en un entorno de desarrollo que no tiene un certificado SSL (Capa de sockets seguros) instalado, debe cambiar el valor del elemento <UseSSL> a False en la entrada de configuración anterior. Se recomienda usar siempre SSL al combinar Reporting Services con la autenticación de formularios.

Deberá agregar un grupo de código para su extensión de seguridad personalizada que otorgue permisos FullTrust para su extensión. Esto se lleva a cabo agregando el grupo de código al archivo rssrvpolicy.config.

Para modificar el archivo RSSrvPolicy.config

  1. Abra el archivo rssrvpolicy.config ubicado en el directorio <instalación>\ReportServer.

  2. Busque el grupo de código existente en el archivo de directiva de seguridad que tenga una pertenencia URL de $CodeGen como se indica a continuación y luego agregue una entrada al archivo rssrvpolicy.config según se indica a continuación.

    [!NOTA] Si tiene instalado Analysis Services, tendrá que cambiar Url="C:\Program Files\Microsoft SQL Server</CODE>MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll por MSSQL.3.

    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="$CodeGen$/*"
       />
    </CodeGroup>
    <CodeGroup
       class="UnionCodeGroup"
       version="1"
       Name="SecurityExtensionCodeGroup"
       Description="Code group for the sample security extension"
       PermissionSetName="FullTrust">
       <IMembershipCondition 
          class="UrlMembershipCondition"
          version="1"
          Url="C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.CustomSecurity.dll"
       />
    </CodeGroup>
    

[!NOTA] Para simplificar, el ejemplo de autenticación de formularios tiene un nombre no seguro y necesita una entrada de pertenencia URL simple en los archivos de directivas de seguridad. En su implementación de la extensión de seguridad de producción, al agregar directivas de seguridad para el ensamblado debe crear ensamblados con nombres seguros y usar la condición de pertenencia de nombre seguro. Para obtener más información acerca de ensamblados con nombres seguros, vea el tema sobre cómo crear y utilizar ensamblados con nombres seguros en MSDN.

A continuación, deberá aumentar los permisos para el grupo de código "Mi PC" en el archivo de directivas del Administrador de informes.

Para modificar el archivo RSMgrPolicy.config

  1. Abra el archivo de directivas del Administrador de informes, rsmgrpolicy.config, que se encuentra en el directorio <instalación>\ReportManager.

  2. Ubique el siguiente grupo de código en rsmgrpolicy.config y cambie el atributo PermissionSetName de Execution a FullTrust, como se indica a continuación:

    <CodeGroup 
            class="FirstMatchCodeGroup" 
            version="1" 
            PermissionSetName="FullTrust"
            Description="This code group grants MyComputer code Execution 
    permission. ">
        <IMembershipCondition 
                class="ZoneMembershipCondition"
                version="1"
                Zone="MyComputer" />
    

Para usar la autenticación de formularios, debe modificar los archivos Web.config para que el Administrador de informes y el Servidor de informes cambien el modo de autenticación e inhabiliten la suplantación.

Para modificar el archivo Web.config para el Servidor de informes

  1. Abra el archivo Web.config en un editor de texto. De forma predeterminada, el archivo se encuentra en el directorio <instalación>\ReportServer.

  2. Busque el elemento <identity> y establezca el atributo Impersonate en false.

    <identity impersonate="false" />
    
  3. Busque el elemento <authentication> y cambie el atributo Mode a Forms.

  4. Agregue el elemento <forms> siguiente como secundario del elemento <authentication> y establezca los atributos loginUrl, name, timeout y path según se indica a continuación:

    <authentication mode="Forms">
       <forms loginUrl="logon.aspx" name="sqlAuthCookie" timeout="60" 
                   path="/"></forms>
       </authentication>
    
  5. Agregue el elemento <authorization> siguiente directamente después del elemento <authentication>.

    <authorization> 
       <deny users="?" />
    </authorization>
    

    Esto denegará a los usuarios no autenticados el derecho a obtener acceso al servidor de informes. El atributo loginUrl establecido anteriormente del elemento <authentication> redirigirá las solicitudes no autenticadas a la página Logon.aspx.

Para modificar el archivo Web.config para el Administrador de informes

  1. Abra el Web.config del Administrador de informes. Se encuentra en el directorio <instalación>\ReportManager.

  2. Deshabilite la suplantación; para ello, busque la sección <identity impersonate= "true" /> y cámbiela por lo siguiente:

Configurar la autenticación anónima

De manera predeterminada, el grupo de usuarios invitados incluye la cuenta IUSR_nombreDelEquipo. Esta cuenta se usa para iniciar sesión localmente y ver la página Logon.aspx. Para admitir la autenticación de formularios, debe habilitar el acceso anónimo para el directorio virtual ReportServer. De manera predeterminada, el acceso anónimo está deshabilitado.

Para habilitar la autenticación anónima

  1. En Servicios de Internet Information Server, seleccione el directorio virtual ReportServer, que suele ser miembro del sitio Web predeterminado, y abra sus fichas Propiedad.

  2. Haga clic en la ficha Seguridad de directorios.

  3. En la sección de Autenticación y control de acceso, haga clic en Editar.

    Aparecerá el cuadro de diálogo Método de autenticación.

  4. Active la casilla de verificación Acceso anónimo.

  5. Haga clic en Aceptar.

    Repita los pasos anteriores para el directorio virtual Reports.

Crear la base de datos UserAccounts

El ejemplo incluye una secuencia de comandos de base de datos, createuserstore.sql, que permite configurar un almacén de usuarios para el ejemplo Forms en una base de datos de SQL Server.

Para crear la base de datos UserAccounts

  1. Abra SQL Server Management Studio y conéctese a la instancia local de SQL Server.

  2. Ubique el archivo de secuencia de comandos SQL createuserstore.sql. El archivo de secuencia de comandos se encuentra dentro de los archivos de proyecto del ejemplo.

  3. Busque "LocalMachine" hacia el final de la secuencia de comandos y reemplácelo con su propio nombre de equipo. Los usuarios de Windows 2003 deben reemplazar LocalMachine\ASPNET por NT AUTHORITY\NETWORK SERVICE (excepto cuando se trabaja en el modo de compatibilidad de IIS 5).

  4. Ejecute la consulta para crear la base de datos UserAccounts.

  5. Salir de SQL Server Management Studio.

Probar el ejemplo

El siguiente procedimiento prueba la extensión del ejemplo. Deberá registrar un usuario administrador, que agrega el nombre de usuario, el valor hash de contraseña y el valor salt a la tabla users de la base de datos UserAccounts. Asimismo, deberá especificar ese nombre de usuario en el archivo de configuración del Servidor de informes. A continuación, iniciará sesión en el mismo usuario para garantizar el funcionamiento correcto de las rutinas de comprobación de contraseñas, así como la carga correcta del ensamblado de extensión por parte del servidor de informes.

Para crear el proyecto del informe

  1. Reinicie IIS ejecutando Iisreset.exe en el símbolo del sistema.

  2. Abra el Administrador de informes. Puede hacerlo desde el menú del programa Reporting Services u obteniendo acceso al directorio virtual Reports desde su explorador.

  3. Escriba un nombre de usuario y una contraseña y haga clic en Registrar usuario para agregar el usuario a la base de datos accounts.

  4. Abra el archivo RSReportServer.config. Busque el elemento <Security> y agregue el nombre de usuario registrado anteriormente como se indica a continuación:

    <Security>
       <Extension Name="Forms" 
    Type="Microsoft.Samples.ReportingServices.CustomSecurity.Authorization, 
    Microsoft.Samples.ReportingServices.CustomSecurity" >
          <Configuration>
             <AdminConfiguration>
                <UserName>username</UserName>
             </AdminConfiguration>
          </Configuration>
       </Extension>
    </Security>
    
  5. Vuelva a la página UILogon.aspx, escriba de nuevo el nombre de usuario y la contraseña y haga clic en Inicio de sesión.

Debe obtener acceso al Administrador de informes y al servidor de informes sin restricciones. El usuario administrador creado tiene permisos sobre el servidor de informes equivalentes a los de una cuenta de administrador integrada en el equipo local. En este ejemplo, sólo puede tener un usuario designado como administrador. Una vez que tenga una cuenta de administrador integrada, puede registrar usuarios adicionales y asignarles funciones en el servidor de informes.

[!NOTA] Debe agregar su usuario administrador a las funciones oficiales de Administrador de sistema y Administrador de contenido (carpeta raíz) del servidor de informes. De este modo se evita que existan descriptores de seguridad vacíos en la base de datos del servidor de informes. Para obtener más información acerca de las funciones Administrador del sistema y Administrador de contenido, vea Información general de las funciones predefinidas.

Usar el servicio Web con seguridad personalizada

Puede usar la API del servicio Web con Autenticación de formularios de la misma forma que lo haría con la Autenticación de Windows. Sin embargo, debe llamar a LogonUser en su código de servicio Web y pasarle las credenciales del usuario actual. Además, el cliente de servicio Web no se beneficiará de la administración automática de cookies, que se ofrece en Internet Explorer u otros exploradores Web. Deberá ampliar la clase proxy Microsoft.ReportingServices para incluir la administración de cookies. Esto puede hacerse anulando los métodos GetWebRequest y GetWebResponse de la clase de servicio Web.

Depurar la extensión del ejemplo

Ejecutar la extensión del ejemplo en el depurador no sólo es una excelente manera de solucionar problemas, sino que también es un método efectivo para analizar el código y ver la autenticación del servidor de informes y el proceso de autenticación a medida que se producen.

Microsoft .NET Framework ofrece varias herramientas de depuración que pueden ayudarle a analizar el código del ejemplo. En el procedimiento siguiente se usa Visual Studio 2005 para depurar el ejemplo anterior.

Para depurar el código del ejemplo de Autenticación de formularios

  1. Inicie Visual Studio y abra CustomSecurity.sln en el servidor de informes de prueba.

  2. Abra Internet Explorer y vaya al Administrador de informes mientras el código de ejemplo queda abierto en Visual Studio.

  3. Vaya a Visual Studio y establezca algunos puntos de interrupción en el código del proyecto de extensión de seguridad personalizado.

  4. Con el proyecto de extensión en la ventana activa, desde el menú Depurar, haga clic en Proceso.

    Se abre el cuadro de diálogo Procesos.

  5. En la lista de procesos, seleccione el proceso Aspnet_wp.exe (o W3wp.exe, si la aplicación se implementa en IIS 6.0), y haga clic en Asociar.

  6. En el cuadro de diálogo Asociar al proceso, seleccione el tipo de programa Common Language Runtime y haga clic en Aceptar. Para mejorar el rendimiento de la depuración, asegúrese de que el tipo de programa Nativo no esté seleccionado.

  7. Cuando se ejecuta el ejemplo, aparece un formulario de inicio de sesión. Escriba las credenciales del usuario en el formulario de inicio de sesión y haga clic en el botón Inicio de sesión.

    Siempre que se encuentren sus puntos de interrupción durante el procesamiento, el depurador deberá interrumpir la ejecución en ese punto.

  8. Recorra el código con la tecla F11. Para obtener más información acerca de cómo usar Visual Studio para depurar, vea la documentación de Visual Studio 2005.

[!NOTA] Llevar a cabo la depuración de este modo exige muchos recursos y tiempo del procesador. Si tiene dificultades, cierre Visual Studio, restablezca IIS, y vuelva a empezar adjuntando la solución CustomSecurity al proceso de trabajo ASP.NET e iniciando sesión en el Administrador de informes.

Eliminar la extensión de ejemplo

Aunque generalmente no se recomienda, se puede volver a la Autenticación de Windows después de probar el ejemplo.

Para volver a la seguridad de Windows

  1. Restaure los siguientes archivos desde las copias de seguridad: Web.config, RSReportServer.config y RSWebApplication.config. De este modo los métodos de autenticación y autorización del servidor de informes deben quedar establecidos en la seguridad predeterminada de Windows. También debe eliminar cualquier entrada realizada para la extensión en los archivos de configuración del Servidor de informes o Administrador de informes.

  2. Deshabilite el acceso anónimo en los Servicios de Internet Information Server (IIS) para el directorio virtual de servidor de informes.

Después de eliminar la información de configuración, la extensión de seguridad ya no estará disponible en el servidor de informes. No debería ser necesario eliminar ningún descriptor de seguridad creado al ejecutar el servidor de informes con la extensión de seguridad del ejemplo. El servidor de informes asigna automáticamente la función de Administrador del sistema al grupo BUILTIN\Administrators en el equipo que aloja el servidor de informes cuando se habilita la Autenticación de Windows. Sin embargo, deberá volver a aplicar manualmente cualquier seguridad basada en funciones para los usuarios de Windows.

Tenga en cuenta que, por lo general, no se recomienda volver a la autenticación de Windows después de migrar a una extensión de seguridad diferente. De hacerlo, se pueden producir errores al intentar obtener acceso a elementos de la base de datos del servidor de informes que tengan descriptores de seguridad personalizados, pero no descriptores de seguridad de autenticación de Windows.

Vea también

Tareas

Ejemplos de SQL Server Reporting Services

Otros recursos

Ejemplos de extensiones (Reporting Services)
Implementing a Security Extension

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

5 de diciembre de 2005

Contenido modificado:
  • Se cambiaron las instrucciones para generar un archivo de clave, incluidos el nombre y la ubicación del archivo.