Descripción de las directivas de seguridad

Cualquier código que ejecute un servidor de informes debe formar parte de una directiva de seguridad de acceso de código específica. Estas directivas de seguridad constan de grupos de código que asignan evidencias a un conjunto de conjuntos de permisos con nombre. Con frecuencia, los grupos de código están asociados a un conjunto de permisos con nombre que especifica los permisos que puede tener el código de ese grupo. El motor en tiempo de ejecución usa las evidencias proporcionadas por un host de confianza o por el cargador para determinar a qué grupos de código pertenece el código y, por tanto, qué permisos se deben conceder al código. Reporting Services cumple esta arquitectura de la directiva de seguridad como lo define Common Language Runtime (CLR) de Microsoft .NET Framework. En las secciones siguientes se describen los distintos tipos de código de Reporting Services y las reglas de directivas asociadas a los mismos.

Ensamblados del servidor de informes

Los ensamblados del servidor de informes contienen código que forma parte del producto Reporting Services. Reporting Services se escribe mediante ensamblados de código administrado; todos estos ensamblados tienen nombres seguros (es decir, están firmados digitalmente). Los grupos de código para estos ensamblados se definen mediante StrongNameMembershipCondition, que proporciona evidencias basadas en información de clave pública para el nombre seguro del ensamblado. Al grupo de código se le permite el conjunto de permisos FullTrust.

Extensiones del servidor de informes (representación, datos, entrega y seguridad)

Las extensiones del servidor de informes son extensiones de seguridad, representación, entrega y datos personalizados que crean los usuarios para extender la funcionalidad de Reporting Services. Debe conceder FullTrust a estas extensiones o código de ensamblado en los archivos de configuración de directivas asociados con el componente de Reporting Services que va a extender. Las extensiones incluidas como parte de Reporting Services se firman con la clave pública del servidor de informes y reciben el conjunto de permisos FullTrust.

Importante

Debe modificar los archivos de configuración de directivas de Reporting Services para permitir FullTrust a cualquier extensión de otro fabricante. Si no agrega un grupo de código con FullTrust para sus extensiones personalizadas, el servidor de informes no podrá usarlas.

Para obtener más información sobre los archivos de configuración de directivas en Reporting Services, vea Usar archivos de directiva de seguridad de Reporting Services.

Expresiones usadas en informes

Las expresiones de informes son expresiones de código insertado o métodos definidos por el usuario incluidos dentro del elemento Code de un archivo de lenguaje RDL (Report Definition Language). Hay un grupo de código que ya está configurado en los archivos de directiva que concede a estas expresiones el conjunto de permisos ejecución de forma predeterminada. El grupo de código tiene el siguiente aspecto:

<CodeGroup  
   class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="Execution"  
   Name="Report_Expressions_Default_Permissions"  
   Description="This code group grants default permissions for code in report expressions and Code element. ">  
    <IMembershipCondition  
       class="StrongNameMembershipCondition"  
       version="1"  
       PublicKeyBlob="002400..."  
    />  
</CodeGroup>  

El permiso Ejecución permite la ejecución del código, pero no el uso de recursos protegidos. Todas las expresiones incluidas en un informe se compilan en un ensamblado (denominado "ensamblado de expresiones") que se almacena como parte del informe compilado. Cuando se ejecuta el informe, el servidor de informes carga el ensamblado de expresiones y realiza llamadas a ese ensamblado para ejecutar expresiones. Los ensamblados de expresiones se firman con una clave concreta que se usa para definir el grupo de código para todos los ensamblados de expresiones.

Las expresiones de informe hacen referencia a las colecciones de modelos de objetos (campos, parámetros, etc.) y realizan tareas simples como operaciones de cadenas y aritméticas. El código que realiza estas operaciones simples solo requiere el permiso Ejecución. De forma predeterminada, a los métodos definidos por el usuario en el elemento Code y cualquier ensamblado personalizado se les concede el permiso Ejecución en Reporting Services. Por lo tanto, para la mayoría de las expresiones, la configuración actual no requiere que modifique ningún archivo de directiva de seguridad. Para conceder permisos adicionales a los ensamblados host de expresiones, un administrador debe modificar los archivos de configuración de directivas del servidor de informes y Diseñador de informes, y cambiar el grupo de código de expresiones de informe. Dado que es una configuración global, cambiar los permisos predeterminados para los hosts de expresiones afecta a todos los informes. Por este motivo, debe colocar todo el código que requiera seguridad adicional en un ensamblado personalizado. Solo a este ensamblado se le conceden los permisos que necesita.

Importante

El código que llama a ensamblados externos o a recursos protegidos debe incorporarse a un ensamblado personalizado para usarlo en informes. Al hacerlo, obtendrá más control sobre los permisos solicitados y validados por su código. No debería realizar llamadas para proteger métodos dentro del elemento Code. Si lo hace, se le exigirá que conceda el permiso FullTrust al ensamblado de expresiones de informe y se concederá todo el acceso total del código personalizado al CLR.

Precaución

No conceda el permiso FullTrust al grupo de código de un ensamblado de expresiones de informe. Si lo hace, permitirá que todas las expresiones de informe realicen llamadas al sistema protegidas.

Ensamblados personalizados a los que se hace referencia en los informes

Algunas expresiones de informe pueden llamar a otros ensamblados de código, también conocidos en Reporting Services como ensamblados personalizados. El servidor de informes espera que estos ensamblados tengan al menos el permiso Ejecución en los archivos de configuración de directivas. De forma predeterminada, los archivos de directivas que se incluyen con Reporting Services conceden el permiso Ejecución a todos los ensamblados que se inician desde la zona 'Mi PC'. Puede conceder permisos adicionales a los ensamblados personalizados según sea necesario.

En algunos casos, es posible que tenga que realizar una operación que requiera permisos de código específicos en una expresión de informe. Normalmente, este escenario significa que una expresión de informe debe realizar una llamada a un método de biblioteca CLR protegido (como uno que tenga acceso a los archivos o al registro del sistema). En la documentación de .NET Framework se describen los permisos de código necesarios para realizar esta llamada segura. Para ejecutar la llamada, al código de llamada se le deben conceder estos permisos específicos y seguros. Si realiza la llamada desde una expresión de informe o el elemento Code, al ensamblado de expresiones se le deben conceder los permisos adecuados. Sin embargo, una vez que concede los permisos al ensamblado de expresiones, a todo el código que se ejecuta en cualquier expresión de cualquier informe se le concede dicho permiso concreto. Es mucho más seguro realizar la llamada desde un ensamblado personalizado y conceder a ese ensamblado personalizado los permisos específicos.