Habilitar y deshabilitar el espacio seguro para RDL para Reporting Services en el modo integrado de SharePoint

Se aplica a: SQL Server Reporting Services (2016) SharePoint ❌ Power BI Report Server

Para obtener contenido relacionado con versiones anteriores de SQL Server Reporting Services (SSRS), vea SQL Server Reporting Services 2014.

La característica de espacio aislado para el lenguaje RDL (Report Definition Language) permite detectar y restringir el uso de tipos específicos de uso de recursos por parte de inquilinos individuales en un entorno donde varios inquilinos usan una única granja web de servidores de informes. Un ejemplo de esto es un escenario de servicios de hospedaje en el que podrías mantener una única granja web de servidores de informes que utilicen varios inquilinos, y quizás compañías diferentes. Como administrador del servidor de informes, puede habilitar esta característica para alcanzar los siguientes objetivos:

  • Restringir los tamaños de recursos externos. Entre los recursos externos se incluyen imágenes, archivos .xslt y datos de mapas.

  • En el tiempo de publicación del informe, limitar los tipos y los miembros que se usan en el texto de expresión.

  • En el tiempo de procesamiento del informe, limitar la longitud del texto y el texto del valor de devolución de las expresiones.

Nota:

La integración de Reporting Services con SharePoint ya no está disponible a partir de SQL Server 2016.

Cuando se habilita el espacio aislado de RDL, se deshabilitan las siguientes características:

  • Código personalizado en el elemento <Code> de una definición de informe.

  • Modo de compatibilidad con versiones anteriores de RDL para los elementos de informe personalizados de SQL Server 2005 Reporting Services (SSRS).

  • Parámetros con nombre en expresiones.

En este artículo se describe cada elemento del elemento <RDLSandboxing> del archivo RSReportServer.Config. Para más información sobre cómo modificar este archivo, consulte Modificación de un archivo de configuración de Reporting Services (RSreportserver.config). Un registro de seguimiento del servidor guarda la actividad relacionada con la característica de espacio aislado de RDL. Para más información sobre los registros de seguimiento, vea Registro de seguimiento del servicio del servidor de informes.

Ejemplo de configuración

En el siguiente ejemplo se muestra la configuración y los valores de ejemplo para el elemento <RDLSandboxing> del archivo RSReportServer.Config.

<RDLSandboxing>  
   <MaxExpressionLength>5000</MaxExpressionLength>  
   <MaxResourceSize>5000</MaxResourceSize>  
   <MaxStringResultLength>3000</MaxStringResultLength>  
   <MaxArrayResultLength>250</MaxArrayResultLength>  
   <Types>  
      <Allow Namespace="System.Drawing" AllowNew="True">Bitmap</Allow>  
      <Allow Namespace="TypeConverters.Custom" AllowNew="True">*</Allow>  
   </Types>  
   <Members>  
      <Deny>Format</Deny>  
      <Deny>StrDup</Deny>  
   </Members>  
</RDLSandboxing>  

Parámetros de configuración

La siguiente tabla proporciona información acerca de los parámetros de configuración. Los parámetros se presentan en el orden en que aparecen en el archivo de configuración.

Configuración Descripción
MaxExpressionLength Número máximo de caracteres permitido en expresiones RDL.

Valor predeterminado: 1000
MaxResourceSize Número máximo de KB permitido para un recurso externo.

Valor predeterminado: 100
MaxStringResultLength Número máximo de caracteres permitido en un valor de devolución para una expresión RDL.

Valor predeterminado: 1000
MaxArrayResultLength Número máximo de elementos permitido en un valor de devolución de matriz para una expresión RDL.

Valor predeterminado: 100
Tipos Lista de los miembros que se permitirán en las expresiones RDL.
Permitir Tipo o conjunto de tipos que se permitirán en las expresiones RDL.
Espacio de nombres Atributo de Allow que es el espacio de nombres que contiene uno o varios tipos que se aplican a Value. Esta propiedad no distingue entre mayúsculas y minúsculas.
AllowNew Atributo booleano de Allow que controla si se permite que las nuevas instancias del tipo se permitan en expresiones RDL o en un elemento <Class> de RDL.

Cuando se habilita RDLSandboxing, no se pueden crear nuevas matrices en expresiones RDL, independientemente de la configuración de AllowNew.
Valor Valor de Allow que es el nombre del tipo que se permitirá en las expresiones RDL. El valor * indica que se permiten todos los tipos del espacio de nombres. Esta propiedad no distingue entre mayúsculas y minúsculas.
Miembros Valor para la lista de tipos que están en el elemento <Types> y la lista de nombres de miembro que no se permiten en las expresiones RDL.
Denegar Nombre de un miembro que no se permite en expresiones RDL. Esta propiedad no distingue entre mayúsculas y minúsculas.

Cuando se especifica Deny para un miembro, no se permite ningún miembro con este nombre para todos los tipos.

Trabajar con expresiones cuando se habilita el espacio seguro para RDL

Puede modificar la característica de espacio aislado de RDL para administrar los recursos que usa una explorador de las siguientes formas:

  • Restringir el número de caracteres que se usa para una expresión.

  • Restringir el tamaño del resultado devuelto por una expresión.

  • Permitir una lista específica de tipos que se pueden usar en una expresión.

  • Restringir la lista de miembros por nombre para la lista de tipos permitidos que se pueden usar en una expresión.

  • La característica de espacio seguro para RDL permite crear una lista de tipos aprobados y lista de integrantes denegados. La lista de tipos aprobados se denomina una lista de permiso. La lista de miembros denegados se denomina lista de bloqueados.

Nota:

En la definición de informe, un equipo no puede conocer el tipo de cada instancia de una referencia de expresión. Al agregar un miembro a la lista de bloqueados, se están denegando todos los miembros de ese nombre en todos los tipos de la lista de permitidos.

Los resultados de la expresión RDL se comprueban en tiempo de ejecución. Las expresiones RDL se comprueban en la definición de informe cuando se publica el informe. Supervise el registro de seguimiento del servidor de informes por si se han producido infracciones. Para obtener más información, consulte Report Server Service Trace Log.

Trabajar con tipos

Al agregar un tipo a la lista de permitidos, controlas los siguientes puntos de entrada para obtener acceso a las expresiones RDL:

  • Miembros estáticos de un tipo.

  • El método ```New`` de Visual Basic.

  • Elemento <Classes> de la definición de informe.

  • Miembros que has agregado a la lista de bloqueados para un tipo de la lista de permitidos.

La lista de permitidos no controla los siguientes puntos de entrada:

  • Conjuntos de datos de informe. Los campos de los conjuntos de datos de informe que se devuelven de las consultas pueden contener cualquier tipo RDL válido.

  • Parámetros de informe. Los valores de parámetro proporcionados por el usuario pueden contener cualquier tipo RDL válido.

  • Miembros de un tipo habilitado que no están en la lista de bloqueados. De manera predeterminada, todos los miembros de todos los tipos de la lista de permitidos están habilitados. Al agregar un nombre de miembro a la lista de bloqueados, estás denegando todos los miembros con ese nombre en todos los tipos que están en la lista de permitidos.

Para habilitar un miembro de un tipo pero denegar un miembro con el mismo nombre de otro tipo, debes realizar las siguientes acciones:

  • Agregar un elemento <Deny> para el nombre de miembro.

  • Crear un miembro de proxy con otro nombre en una clase de un ensamblado personalizado para el miembro que desea habilitar.

  • Agregar la clase nueva a la lista de permitidos.

Para agregar funciones de Visual Basic .NET Framework a la lista de permitidos, agrega los tipos correspondientes del espacio de nombres Microsoft.VisualBasic a la lista de permitidos.

Para agregar palabras clave de tipo Visual Basic .NET Framework a la lista de permitidos, agrega el tipo CLR correspondiente a la lista de permitidos. Por ejemplo, para usar la palabra clave Integer de Visual Basic .NET Framework, agrega el siguiente fragmento XML al elemento <RDLSandboxing>:

<Allow Namespace="System">Int32</Allow>  

Para agregar un tipo genérico o que acepta valores NULL de Visual Basic .NET Framework a la lista de permitidos, debes realizar estas acciones:

  • Crear un tipo de proxy para el tipo genérico o que acepta valores NULL de Visual Basic .NET Framework.

  • Agregar el tipo de proxy a la lista de permitidos.

Al agregar un tipo de un ensamblado personalizado a la lista de permitidos no se concede permiso de ejecución de forma explícita en el ensamblado. Debe modificar de forma específica el archivo de seguridad de acceso del código y proporcionar el permiso de ejecución en el ensamblado. Para más información, consulte Code Access Security in Reporting Services.

Mantenimiento de la lista de miembros <Deny>

Al agregar un nuevo tipo a la lista de permitidos, usa la siguiente lista para determinar cuándo tendrá que actualizar la lista de miembros bloqueados:

  • Al actualizar un ensamblado personalizado con una versión que introduce nuevos tipos.

  • Al agregar los miembros a los tipos de la lista de permitidos.

  • Al actualizar .NET Framework en el servidor de informes.

  • Al actualizar el servidor de informes a una versión posterior de Reporting Services.

  • Al actualizar un servidor de informes para administrar un esquema RDL posterior, porque se pueden haber agregado nuevos miembros a los tipos RDL.

Trabajar con operadores y New

De manera predeterminada, los operadores de lenguaje de Visual Basic .NET Framework siempre están permitidos, excepto para New. El atributo AllowNew del elemento <Allow> controla el operador New. Otros operadores de lenguaje, como el operador de acceso a colección predeterminado ! y las macros de conversión de Visual Basic .NET Framework como CInt, siempre están permitidos.

No se admite la adición de operadores a la lista de bloqueados, incluidos los operadores personalizados. Para excluir los operadores de un tipo, debes realizar las siguientes acciones:

  • Crear un tipo de proxy que no implemente los operadores que quieras excluir.

  • Agregar el tipo de proxy a la lista de permitidos.

Para crear una matriz en una expresión RDL, crea la matriz en un método de una clase que hayas definido y agrega dicha clase a la lista de permitidos.

Para crear una matriz en una expresión RDL, debes realizar las siguientes acciones:

  • Definir una nueva clase y crear la matriz en un método de dicha clase.

  • Agregar la clase a la lista de permitidos.

Archivo de configuración RSReportServer.config
Registro de seguimiento del servicio del servidor de informes

¿Tiene alguna pregunta más? Puede plantear sus dudas en el foro de Reporting Services.