Condividi tramite


Abilitare e disabilitare la sandbox RDL

La funzionalità di sandboxing RDL (Report Definition Language) consente di rilevare e limitare l'utilizzo di tipi specifici di risorse, da singoli tenant, in un ambiente di più tenant che usano una singola Web farm di server di report. Un esempio è uno scenario di servizi di hosting in cui è possibile gestire una singola Web farm di server di report usati da più tenant e, ad esempio, società diverse. In qualità di amministratore del server di report, è possibile abilitare questa funzionalità per raggiungere gli obiettivi seguenti:

  • Limitare le dimensioni delle risorse esterne. Le risorse esterne includono immagini, file con estensione xslt e dati mappa.

  • In fase di pubblicazione del report, limitare i tipi e i membri utilizzati nel testo dell'espressione.

  • In fase di elaborazione del report, limitare la lunghezza del testo e le dimensioni del valore restituito per le espressioni.

Quando RDL Sandboxing è abilitato, sono disabilitate le caratteristiche seguenti:

  • Codice personalizzato nell'elemento <Code> di una definizione di report.

  • Modalità di compatibilità con le versioni precedenti di RDL per gli elementi del report personalizzati di SQL Server 2005 Reporting Services (SSRS).

  • Parametri denominati nelle espressioni.

Questo argomento descrive ogni elemento dell'elemento <RDLSandboxing> nel file RSReportServer.Config. Per altre informazioni su come modificare questo file, vedere Modificare un file di configurazione di Reporting Services (RSreportserver.config). Un log di traccia del server registra l'attività correlata alla funzionalità di sandboxing RDL. Per ulteriori informazioni sui log di traccia, consultare Log di traccia del servizio di Report Server.

Configurazione di esempio

Nell'esempio seguente vengono illustrate le impostazioni e i valori di esempio per l'elemento <RDLSandboxing> nel file 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>  

Impostazioni di configurazione

Nella tabella seguente vengono fornite informazioni sulle impostazioni di configurazione. Le impostazioni vengono presentate nell'ordine in cui vengono visualizzate nel file di configurazione.

Impostazione Descrizione
MaxExpressionLength Numero massimo di caratteri consentiti nelle espressioni RDL.

Impostazione predefinita: 1000
MaxResourceSize Numero massimo di KB consentiti per una risorsa esterna.

Impostazione predefinita: 100
MaxStringResultLength Numero massimo di caratteri consentiti in un valore restituito per un'espressione RDL.

Impostazione predefinita: 1000
MaxArrayResultLength Numero massimo di elementi consentiti in un valore restituito di matrice per un'espressione RDL.

Impostazione predefinita: 100
Tipi Elenco di membri da autorizzare all'interno di espressioni RDL.
Consenti Tipo o set di tipi da consentire nelle espressioni RDL.
spazio dei nomi Attributo per Allow che è lo spazio dei nomi che contiene uno o più tipi applicabili a Value. Questa proprietà non fa distinzione tra maiuscole e minuscole.
AllowNew Attributo booleano per Allow che controlla se è consentito creare nuove istanze del tipo nelle espressioni RDL o in un elemento Classe> RDL<.

Nota: quando RDLSandboxing è abilitato, non è possibile creare nuove matrici nelle espressioni RDL, indipendentemente dall'impostazione di AllowNew.
Valore Valore per Allow che è il nome del tipo da consentire nelle espressioni RDL. Il valore * indica che tutti i tipi nello spazio dei nomi sono consentiti. Questa proprietà non fa distinzione tra maiuscole e minuscole.
Membri Per l'elenco dei tipi inclusi nell'elemento Types>, l'elenco< dei nomi dei membri non consentiti nelle espressioni RDL.
Nega Nome di un membro non consentito nelle espressioni RDL. Questa proprietà non fa distinzione tra maiuscole e minuscole.

Nota: quando si specifica Deny per un membro, non sono consentiti tutti i membri con questo nome per tutti i tipi.

Lavorare con le espressioni quando il sandboxing RDL è abilitato

È possibile modificare la funzionalità RDL Sandboxing per gestire le risorse usate da un'espressione nei modi seguenti:

  • Limitare il numero di caratteri utilizzati per un'espressione.

  • Limitare le dimensioni del risultato restituito da un'espressione.

  • Consente un elenco specifico di tipi che possono essere usati in un'espressione.

  • Limitare l'elenco dei membri in base al nome per l'elenco di tipi consentiti che possono essere usati in un'espressione.

  • La funzionalità RDL Sandboxing consente di creare un elenco di tipi approvati e un elenco di membri negati. L'elenco dei tipi approvati è denominato elenco di elementi consentiti. L'elenco dei membri negati è denominato elenco di blocchi.

Annotazioni

Nella definizione del report un computer non può conoscere il tipo di ogni istanza di un riferimento a un'espressione. Quando si aggiunge un membro alla lista di blocco, si negano tutti i membri con quel nome in tutti i tipi presenti nell'elenco consentito.

I risultati dell'espressione RDL vengono verificati in fase di esecuzione. Le espressioni RDL vengono verificate nella definizione del report quando il report viene pubblicato. Monitorare il log di traccia del server di report per individuare eventuali violazioni. Per ulteriori informazioni, consultare il Log di traccia del servizio Report Server.

Lavorare con i tipi

Quando si aggiunge un tipo all'elenco elementi consentiti, si controllano i punti di ingresso seguenti per accedere alle espressioni RDL:

  • Membri statici di un tipo.

  • Il metodo New di Visual Basic.

  • Elemento <Classes> nella definizione del report.

  • Membri che hai aggiunto all'elenco di blocco per un tipo nell'elenco di elementi consentiti.

La lista di autorizzazione non controlla i seguenti punti di ingresso:

  • Set di dati del report. I campi nei set di dati del report restituiti dalle query potrebbero contenere qualsiasi tipo RDL valido.

  • Parametri del report. I valori dei parametri forniti dall'utente possono contenere qualsiasi tipo RDL valido.

  • Membri di un tipo abilitato che non si trovano nell'elenco di blocco. Per impostazione predefinita, tutti i membri di tutti i tipi nell'elenco consenti sono abilitati. Quando si aggiunge un nome di membro alla lista di blocco, si negano tutti i membri con quel nome in tutti i tipi che sono nella lista di autorizzazione.

Per abilitare un membro di un tipo ma negare un membro con lo stesso nome per un tipo diverso, è necessario eseguire le operazioni seguenti:

  • Aggiungere un <elemento Deny> per il nome del membro.

  • Creare un membro proxy con un nome diverso in una classe in un assembly personalizzato per il membro da abilitare.

  • Aggiungi quella nuova classe all'elenco dei permessi.

Per aggiungere funzioni .NET Framework di Visual Basic all'elenco consentiti, aggiungere i tipi corrispondenti dallo spazio dei nomi Microsoft.VisualBasic all'elenco consentiti.

Per aggiungere parole chiave di tipo di Visual Basic .NET Framework all'elenco consentiti, aggiungere il tipo CLR corrispondente all'elenco consentiti. Ad esempio, per usare la parola chiave Integer.NET Framework di Visual Basic, aggiungere il frammento XML seguente all'elemento <RDLSandboxing> :

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

Per aggiungere un tipo generico o Visual Basic Framework .NET nullable all'elenco degli elementi consentiti, è necessario eseguire le operazioni seguenti:

  • Crea un tipo proxy per il tipo generico o nullable di Visual Basic .NET Framework.

  • Aggiungere il tipo di proxy all'elenco elementi consentiti.

L'aggiunta di un tipo da un assembly personalizzato all'elenco elementi consentiti non concede in modo implicito l'autorizzazione di esecuzione per l'assembly. È necessario modificare in modo specifico il file di sicurezza dell'accesso al codice e fornire l'autorizzazione di esecuzione per l'assembly. Per altre informazioni, vedere Sicurezza dall'accesso al codice in Reporting Services.

Gestione dell'elenco <dei membri bloccati>

Quando si aggiunge un nuovo tipo all'elenco elementi consentiti, usare l'elenco seguente per determinare quando potrebbe essere necessario aggiornare l'elenco di membri bloccati:

  • Quando si aggiorna un assembly personalizzato con una versione che introduce nuovi tipi.

  • Quando si aggiungono membri ai tipi consentiti nell'elenco degli elementi consentiti.

  • Quando si aggiorna il .NET Framework sul report server.

  • Quando si aggiorna il server di report a una versione successiva di Reporting Services.

  • Quando si aggiorna un server di report per gestire uno schema RDL successivo, perché potrebbero essere stati aggiunti nuovi membri ai tipi RDL.

Uso degli operatori e dei nuovi

Per impostazione predefinita, gli operatori di linguaggio .NET Framework di Visual Basic, ad eccezione di New, sono sempre consentiti. L'operatore New è controllato dall'attributo AllowNew nell'elemento <Allow> . Sono sempre consentiti altri operatori di linguaggio, ad esempio l'operatore ! di accesso alla raccolta predefinita e le macro di cast di Visual Basic .NET Framework, ad esempio CInt.

L'aggiunta di operatori a un elenco di blocchi, inclusi gli operatori personalizzati, non è supportata. Per escludere gli operatori per un tipo, è necessario eseguire le operazioni seguenti:

  • Creare un tipo proxy che non implementa gli operatori da escludere.

  • Aggiungere il tipo di proxy all'elenco elementi consentiti.

Per creare una nuova matrice in un'espressione RDL, creare la matrice in un metodo in una classe definita dall'utente e aggiungere tale classe all'elenco elementi consentiti.

Per creare una nuova matrice in un'espressione RDL, è necessario eseguire le operazioni seguenti:

  • Definire una nuova classe e creare la matrice in un metodo su tale classe.

  • Aggiungi la classe alla lista di autorizzazione.

Vedere anche

File di configurazione RSReportServer
Log di traccia del servizio del server di report