Compartilhar via


Habilitar e desabilitar o RDL Sandboxing para o Reporting Services no modo integrado do SharePoint

Aplica-se a: SQL Server Reporting Services (2016) SharePoint ❌ Servidor de Relatórios do Power BI

Para obter conteúdo relacionado a versões anteriores do SSRS (SQL Server Reporting Services), confira O que é o SQL Server Reporting Services?

O recurso RDL em Área Restrita (Linguagem RDL) permite que você detecte e restrinja o uso de tipos específicos de recursos, por locatários individuais, em um ambiente de vários locatários que usam um único web farm de servidores de relatório. Um exemplo disso é um cenário de serviços de hospedagem onde você poderia manter um único web farm de servidores de relatório que são usados por vários locatários e empresas diferentes. Como administrador de servidor de relatório, você pode permitir que esse recurso ajude a obter os objetivos seguintes:

  • Restringir tamanhos de recursos externos. Recursos externos incluem imagens, arquivos .xslt e dados de mapa.

  • Na hora da publicação do relatório, tipos de limite e membros que são usados em texto de expressão.

  • Na hora do processamento do relatório, limite o comprimento do texto e o tamanho do valor de retorno para expressões.

Observação

A integração do Reporting Services ao SharePoint não está mais disponível após o SQL Server 2016.

Quando o RDL Sandboxing está habilitado, os seguintes recursos são desabilitados:

  • Código personalizado no elemento <Code> de uma definição de relatório.

  • Modo de compatibilidade com versões anteriores RDL para itens de relatório personalizados (SSRS) de Reporting Services de 2005.

  • Parâmetros nomeados em expressões.

Este artigo descreve cada elemento no elemento <RDLSandboxing> do arquivo RSReportServer.Config. Para obter mais informações sobre como modificar esse arquivo, confira Modificar um Arquivo de Configuração do Reporting Services (RSreportserver.config). Um log de rastreamento de servidor registra atividade relacionada ao recurso RDL Sandboxing. Para obter mais informações sobre logs de rastreamento, consulte Log de rastreamento do serviço Servidor de Relatório.

Configuração de exemplo

O exemplo a seguir mostra as configurações e os valores de exemplo para o elemento <RDLSandboxing> no arquivo 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>  

Definições de configuração

A tabela a seguir fornece informações sobre definições de configuração. As configurações são apresentadas na ordem em que aparecem no arquivo de configuração.

Configuração Descrição
MaxExpressionLength Número máximo de caracteres permitido em expressões RDL.

Padrão: 1000
MaxResourceSize Número máximo de KB permitido em um recurso externo.

Padrão: 100
MaxStringResultLength Número máximo de caracteres permitido em um valor de retorno para uma expressão RDL.

Padrão: 1000
MaxArrayResultLength Número máximo de itens permitido em um valor de resposta de matrizes para uma expressão RDL.

Padrão: 100
Types A lista de membros para permitir dentro de expressões RDL.
Permitir Um tipo ou conjunto de tipos para permitir em expressões RDL.
Namespace Atributo para Allow que é o namespace que contém um ou mais tipos que se aplicam a Valor. Esta propriedade não diferencia maiúsculas e minúsculas.
AllowNew Atributo booliano para Allow que controla se novas instâncias do tipo têm permissão para serem criadas em expressões RDL ou em um elemento de <Classe> RDL.

Quando RDLSandboxing está habilitado, novas matrizes não podem ser criadas em expressões RDL, seja qual for a configuração de AllowNew.
Valor Valor para Allow que é o nome do tipo para permitir em expressões RDL. O valor * indica que todos os tipos no namespace são permitidos. Esta propriedade não diferencia maiúsculas e minúsculas.
Membros O valor para a lista de tipos que estão incluídos no elemento <Types> e a lista de nomes de membros que não são permitidos em expressões RDL.
Deny O nome de um membro que não é permitido em expressões RDL. Esta propriedade não diferencia maiúsculas e minúsculas.

Quando Deny é especificado para um membro, nenhum membro com esse nome para todos os tipos é permitido.

Trabalhando com expressões quando o RDL Sandboxing está habilitado

Você pode modificar o recurso RDL Sandboxing para gerenciar os recursos que são usados por uma expressão das seguintes maneiras:

  • Restrinja o número de caracteres que são usados para uma expressão.

  • Restrinja o tamanho do resultado retornado por uma expressão.

  • Permita uma lista específica de tipos que podem ser usados em uma expressão.

  • Restrinja a lista de membros por nome para a lista de tipos permitidos que podem ser usados em uma expressão.

  • O recurso RDL Sandboxing permite criar uma lista de tipos aprovados e uma lista de membros negados. A lista de tipos aprovados é chamada de lista de permissão. A lista de membros negados é chamada de lista lista de bloqueio.

Observação

Na definição de relatório, um computador não pode saber o tipo de todas as instâncias de uma referência de expressão. Quando você acrescentar um membro à lista de bloqueio, estará negando todos os membros daquele nome em todos os tipos na lista de permissões.

Resultados de expressão RDL são verificados em tempo de execução. Expressões RDL são verificadas na definição de relatório quando o relatório é publicado. Monitore o log de rastreamento de servidor de relatório em busca de violações. Para obter mais informações, consulte Report Server Service Trace Log.

Trabalhando com tipos

Quando você acrescentar um tipo à lista de permissões, estará controlando os seguintes pontos de entrada para acessar expressões RDL:

  • Membros estáticos de um tipo.

  • O método Visual Basic ```Novo``.

  • O elemento <Classes> na definição de relatório.

  • Membros que você adicionou à lista de bloqueio para um tipo na lista de permissões.

A lista de permissões não controla os seguintes pontos de entrada:

  • Conjuntos de dados de relatório. Campos em conjuntos de dados de relatório que são retornados de consultas que possam conter algum tipo RDL válido.

  • Parâmetros de relatório. Os valores de parâmetros fornecidos pelo usuário podem conter algum tipo RDL válido.

  • Membros de um tipo habilitado que não estão na lista de bloqueio. Por padrão, todos os membros de todos os tipos são habilitados na lista de permissões. Quando você acrescentar um nome de membro à lista de bloqueio, estará negando todos os membros com aquele nome em todos os tipos que estiverem na lista de permissões.

Para habilitar um membro de um tipo mas negar um membro com o mesmo nome para um tipo diferente, você deve realizar as seguintes ações:

  • Adicione um elemento <Deny> para o nome do membro.

  • Crie um membro de proxy com um nome diferente em uma classe em um assembly personalizado para o membro que você deseja habilitar.

  • Acrescente aquela nova classe à lista de permissões.

Para acrescentar funções de .NET Framework do Visual Basic à lista de permissões, acrescente os tipos correspondentes do namespace Microsoft.VisualBasic à lista de permissões.

Para acrescentar palavras-chave de tipo do .NET Framework do Visual Basic à lista de permissões, acrescente o tipo CLR correspondente à lista de permissões. Por exemplo, para usar a palavra-chave Integer do .NET Framework do Visual Basic, acrescente o seguinte fragmento XML ao elemento <RDLSandboxing>:

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

Para acrescentar um tipo genérico ou que permite valor nulo do .NET Framework do Visual Basic à lista de permissões, você deve realizar as seguintes ações:

  • Criar um tipo de proxy para o tipo genérico ou anulável do .NET Framework do Visual Basic.

  • Adicione um tipo de proxy à lista de permissões.

Acrescentar um tipo de um assembly personalizado à lista de permissões não concede implicitamente permissão de execução no assembly. Você deve modificar especificamente o arquivo de segurança de acesso a código e fornecer permissão de execução ao assembly. Para obter mais informações, veja Segurança de acesso do código no Reporting Services.

Mantendo a lista <Deny> de membros

Quando você acrescentar um tipo à lista de permissões, use a lista a seguir para determinar quando você deverá atualizar a lista de bloqueio.

  • Quando você atualiza um assembly personalizado com uma versão que introduz novos tipos.

  • Quando você acrescenta os membros aos tipos na lista de permissões.

  • Quando você atualiza o .NET Framework no servidor de relatório.

  • Quando você atualiza o servidor de relatório para uma versão mais recente do Reporting Services.

  • Quando você atualiza um servidor de relatório para tratar um esquema de RDL posterior, porque novos membros podem ter sido adicionados a tipos RDL.

Trabalhando com operadores e New

Por padrão, os operadores de linguagem do .NET Framework do Visual Basic, com exceção de New, sempre são permitidos. O atributo AllowNew no elemento <Allow> controla o operador New. Outros operadores de idioma, como o operador acessador de coleção padrão ! e as macros de conversão do .NET Framework do Visual Basic como CInt, são sempre permitidos.

Não há suporte para a adição de operadores a uma lista de bloqueio, incluindo operadores personalizados. Para excluir operadores para um tipo, você deve realizar as seguintes ações:

  • Crie um tipo de proxy que não implementa os operadores que você deseja excluir.

  • Adicione um tipo de proxy à lista de permissões.

Para criar uma nova matriz em uma expressão RDL, crie a matriz em um método em uma classe que você define e acrescente essa classe à lista de permissões.

Para criar uma nova matriz em uma expressão RDL, você deve realizar as seguintes ações:

  • Defina uma nova classe e crie a matriz em um método nessa classe.

  • Adicione a classe à lista de permissões.