Descripción de las directivas de seguridad

Cualquier código ejecutado por un servidor de informes debe formar parte de una directiva de seguridad de acceso a código concreta. 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 son aquellos que 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 Plena confianza.

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 Plena confianza a estas extensiones o código de ensamblado en los archivos de configuración de directivas asociados al componente Reporting Services que está extendiendo. 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 Plena confianza.

Nota importanteImportante

Debe modificar los archivos de configuración de directivas de Reporting Services para permitir Plena confianza a cualquier extensión de otro fabricante. Si no agrega un grupo de código con Plena confianza 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 de Reporting Services, vea Usar los archivos de directivas 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 ya configurado en los archivos de directivas que concede a estas expresiones el conjunto de permisos Ejecución de forma predeterminada. El grupo de código tiene un aspecto similar al siguiente:

<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 usa 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 sólo 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. Así, para la mayoría de las expresiones, la configuración actual no requiere la modificación de ningún archivo de directiva de seguridad. Para conceder permisos adicionales a los ensamblados de expresiones, un administrador tiene que modificar los archivos de configuración de directivas del servidor de informes y el Diseñador de informes, y cambiar el grupo de código de expresiones de informe. Dado que es un valor global, el cambio de los permisos predeterminados para los ensamblados de expresiones afecta a todos los informes. Por esta razón, resulta muy recomendable que coloque todo el código que requiere seguridad adicional en un ensamblado personalizado. Sólo a este ensamblado se le concederán los permisos que necesita.

Nota de seguridadNota de seguridad

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 Plena confianza al ensamblado de expresiones de informe y se concederá todo el acceso total a código personalizado al CLR.

Nota de advertenciaAdvertencia

No conceda Plena confianza al grupo de código para 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 informes

Algunas expresiones de informes pueden llamar a ensamblados de terceros, 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 ensamblados personalizados según sea necesario.

En algunos casos, puede que necesite realizar una operación que requiera permisos de código concretos en una expresión de informe. Normalmente, esto significa que una expresión de informe tiene que realizar una llamada a un método de biblioteca CLR protegido (como uno que tiene acceso a archivos o al registro del sistema). La documentación de .NET Framework describe los permisos de código que se exigen para realizar esta llamada segura; para ejecutar la llamada, al código de llamada se le deben conceder estos permisos concretos 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 los permisos concretos a dicho ensamblado personalizado.