Compartir a través de


Seguridad de acceso al código en Reporting Services

La seguridad de acceso al código se centra en estos conceptos básicos: evidencia, grupos de código y conjuntos de permisos con nombre. En Reporting Services, los componentes administrador de informes, Diseñador de informes y Servidor de informes tienen cada uno un archivo de directiva que configura la seguridad de acceso al código para ensamblados personalizados, así como datos, entrega, representación y extensiones de seguridad. En las secciones siguientes se proporciona información general sobre la seguridad de acceso al código. Para obtener información más detallada sobre los temas tratados en esta sección, vea "Modelo de directivas de seguridad" en la documentación del SDK de Microsoft .NET Framework.

Reporting Services usa la seguridad de acceso al código porque, aunque el servidor de informes se basa en ASP.NET tecnología, hay una diferencia sustancial entre una aplicación ASP.NET típica y el servidor de informes. Una aplicación ASP.NET típica no ejecuta código de usuario. En cambio, Reporting Services usa una arquitectura abierta y extensible que permite a los usuarios programar en los archivos de definición de informe mediante el elemento Code del lenguaje de definición de informes y desarrollar funcionalidades especializadas en un ensamblado personalizado para su uso en informes. Además, los desarrolladores pueden diseñar e implementar extensiones eficaces que mejoran las funcionalidades del servidor de informes. Con este poder y flexibilidad se ofrece la necesidad de proporcionar la mayor protección y seguridad posible.

Los desarrolladores de Reporting Services pueden usar cualquier ensamblado de .NET Framework en sus informes y llamar de forma nativa a todas las funciones de los ensamblados implementados en la caché global de ensamblados. Lo único que el servidor de informes puede controlar es qué permisos se conceden para las expresiones de informe y los ensamblados personalizados cargados. En Reporting Services, los ensamblados personalizados reciben permisos de solo ejecución de forma predeterminada.

Evidencia

La evidencia es la información que Common Language Runtime (CLR) usa para determinar una directiva de seguridad para los ensamblados de código. La evidencia indica al tiempo de ejecución que el código tiene una característica determinada. Entre las formas comunes de evidencia se incluyen firmas digitales y la ubicación de un ensamblado. La evidencia también se puede diseñar de forma personalizada para representar otra información que sea significativa para la aplicación.

Tanto los ensamblados como los dominios de aplicación reciben permisos en función de la evidencia. Por ejemplo, la ubicación de un ensamblado al que Reporting Services intenta acceder es una forma común de evidencia para los ensamblados con nombre débil. Esto se conoce como evidencia de dirección URL. La evidencia de dirección URL de una extensión de procesamiento de datos personalizada implementada en un servidor de informes podría ser "C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll". El nombre seguro o la firma digital de un ensamblado es otra forma común de evidencia. En este caso, la evidencia es la información de clave pública de un ensamblado.

Grupos de código

Un grupo de código es una agrupación lógica de código que tiene una condición especificada para la pertenencia. Cualquier código que cumpla la condición de pertenencia se incluye en el grupo. Los administradores configuran una directiva de seguridad mediante la administración de grupos de código y sus conjuntos de permisos asociados.

Una condición de pertenencia para un grupo de código se basa en evidencia. Por ejemplo, una pertenencia a direcciones URL para un grupo de código se basa en la evidencia de dirección URL. Common Language Runtime (CLR) usa características de identificación como la evidencia de dirección URL para describir el código y determinar si se ha cumplido la condición de pertenencia de un grupo. Por ejemplo, si la condición de pertenencia de un grupo de código es "código en el ensamblado C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll", el tiempo de ejecución examina la evidencia para determinar si el código se origina desde esa ubicación. Un ejemplo de una entrada de configuración para este tipo de grupo de código podría tener un aspecto similar al siguiente:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="FullTrust"  
   Name="MyCodeGroup"  
   Description="Code group for my data processing extension">  
      <IMembershipCondition class="UrlMembershipCondition"  
         version="1"  
         Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"  
       />  
</CodeGroup>  

Debe trabajar con el administrador del sistema o el experto en implementación de aplicaciones para determinar el tipo de seguridad de acceso al código y los grupos de código que requieren los ensamblados personalizados o las extensiones de Reporting Services.

Conjuntos de permisos con nombre

Un conjunto de permisos con nombre es un conjunto de permisos que los administradores pueden asociar a un grupo de código. La mayoría de los conjuntos de permisos con nombre constan de al menos un permiso, un nombre y una descripción para el conjunto de permisos. Los administradores pueden usar conjuntos de permisos con nombre para establecer o modificar la directiva de seguridad para los grupos de código. Se puede asociar más de un grupo de código al mismo conjunto de permisos con nombre. CLR proporciona conjuntos de permisos con nombre integrados; entre ellos se encuentran Nothing, Execution, Internet, LocalIntranet, Everything y FullTrust.

Nota:

Los datos personalizados, la entrega, la representación y las extensiones de seguridad de Reporting Services deben ejecutarse en el conjunto de permisos FullTrust . Trabaje con el administrador del sistema para agregar las condiciones de pertenencia y grupo de código adecuadas para las extensiones de Reporting Services.

Puede asociar sus propios niveles de permisos personalizados para ensamblados personalizados que use con informes. Por ejemplo, si desea permitir que un ensamblado acceda a un archivo específico, puede crear un nuevo conjunto de permisos con nombre con acceso de E/S de archivo específico y, a continuación, asignar el conjunto de permisos al grupo de código. El siguiente conjunto de permisos concede acceso de solo lectura al archivo MyFile.xml:

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="MyNewFilePermissionSet"  
   Description="A special permission set that grants read access to my file.">  
    <IPermission class="FileIOPermission"  
       version="1"  
       Read="C:\MyFile.xml"/>  
    <IPermission class="SecurityPermission"  
       version="1"  
       Flags="Assertion, Execution"/>  
</PermissionSet>  

Un grupo de código que conceda este conjunto de permisos podría ser similar al siguiente:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="MyNewFilePermissionSet"  
   Name="MyNewCodeGroup"  
   Description="A special code group for my custom assembly.">  
   <IMembershipCondition class="UrlMembershipCondition"  
      version="1"  
      Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>  
</CodeGroup>  

Véase también

Desarrollo seguro (Reporting Services)