Condividi tramite


Abilitazione e disabilitazione di RDL Sandboxing

La caratteristica RDL (Report Definition Language) Sandboxing consente di rilevare e limitare l'utilizzo di tipi specifici di risorse in base a singoli tenant in un ambiente in cui più tenant utilizzano una sola Web farm di server di report. Un esempio di questo tipo è rappresentato dai servizi di hosting in cui è possibile gestire una sola Web farm di server di report utilizzati da più tenant e probabilmente da società diverse. L'amministratore del server di report può abilitare questa caratteristica per ottenere gli obiettivi seguenti:

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

  • Al momento della pubblicazione del report, limitare i tipi e i membri utilizzati nel testo dell'espressione.

  • Al momento dell'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 del report.

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

  • Parametri denominati nelle espressioni.

In questo argomento viene descritto ogni elemento dell'elemento <RDLSandboxing> nel file RSReportServer.Config. Per ulteriori informazioni su come modificare il file, vedere Procedura: Modifica di un file di configurazione di Reporting Services. Attività dei record del log di traccia del server correlata alla caratteristica RDL Sandboxing. Per ulteriori informazioni sui log di traccia, vedere Log di traccia del servizio del server di report.

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 sono contenute le informazioni sulle impostazioni di configurazione. Le impostazioni sono elencate nell'ordine in cui vengono visualizzate nel file di configurazione.

Impostazione

Descrizione

MaxExpressionLength

Numero massimo di caratteri consentiti nelle espressioni RDL.

Valore predefinito: 1000

MaxResourceSize

Numero massimo di KB consentiti per una risorsa esterna.

Valore predefinito: 100

MaxStringResultLength

Numero massimo di caratteri consentiti in un valore restituito per un'espressione RDL.

Valore predefinito: 1000

MaxArrayResultLength

Numero massimo di elementi consentiti in un valore restituito della matrice per un'espressione RDL.

Valore predefinito: 100

Types

Elenco di membri da consentire nelle espressioni RDL.

Allow

Tipo o set di tipi da consentire nelle espressioni RDL.

Namespace

Attributo per Allow che è lo spazio dei nomi contenente uno o più tipi che si applicano a Valore. Questa proprietà supporta la distinzione tra maiuscole e minuscole.

AllowNew

Attributo booleano per Allow che controlla se le nuove istanze del tipo possono essere create nelle espressioni RDL o in un elemento RDL <Class>.

NotaNota
Quando RDLSandboxing è abilitato, non è possibile creare nuove matrici nelle espressioni RDL, indipendentemente dall'impostazione di AllowNew.

Value

Valore per Allow, ovvero il nome del tipo da consentire nelle espressioni RDL. Il valore * indica che sono consentiti tutti i tipi nello spazio dei nomi. Questa proprietà supporta la distinzione tra maiuscole e minuscole.

Members

Per l'elenco dei tipi inclusi nell'elemento <Types>, l'elenco dei nomi dei membri non consentiti nelle espressioni RDL.

Deny

Nome di un membro non consentito nelle espressioni RDL. Questa proprietà supporta la distinzione tra maiuscole e minuscole.

NotaNota
Quando per un membro è specificato Deny, non è consentito nessun membro con questo nome per tutti i tipi.

Utilizzo delle espressioni con RDL Sandboxing abilitato

È possibile modificare la caratteristica RDL Sandboxing per facilitare la gestione delle risorse utilizzate da un'espressione nelle modalità seguenti:

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

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

  • Consentire un elenco specifico di tipi che possono essere utilizzati in un'espressione.

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

  • La caratteristica RDL Sandboxing consente di creare un elenco di tipi approvati e un elenco di membri non autorizzati. L'elenco dei tipi approvati viene denominato elenco consentiti mentre l'elenco di membri non autorizzati viene denominato elenco bloccati.

Nota

Nella definizione del report, un computer non può conoscere il tipo di ogni istanza di un riferimento all'espressione. Quando si aggiunge un membro all'elenco bloccati, vengono negati tutti i membri con quel nome in tutti i tipi nell'elenco consentiti.

I risultati dell'espressione RDL vengono verificati in fase di esecuzione. Le espressioni RDL vengono verificate nella definizione del report durante la pubblicazione di quest'ultimo. Monitorare il log di traccia del server di report relativamente alle violazioni. Per ulteriori informazioni, vedere Log di traccia del servizio del server di report.

Utilizzo dei tipi

Quando si aggiunge un tipo all'elenco consentiti, vengono controllati i punti di ingresso seguenti per l'accesso alle espressioni RDL:

  • Membri statici di un tipo.

  • Metodo New di Visual Basic.

  • Elemento <Classes> nella definizione del report.

  • Membri aggiunti all'elenco bloccati per un tipo nell'elenco consentiti.

L'elenco consentiti non controlla i punti di ingresso seguenti:

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

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

  • Membri di un tipo abilitato non inclusi nell'elenco bloccati. Per impostazione predefinita, vengono abilitati tutti i membri di tutti i tipi nell'elenco consentiti. Quando si aggiunge il nome di un membro all'elenco bloccati, vengono negati tutti i membri con quel nome in tutti i tipi nell'elenco consentiti.

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 di un assembly personalizzato per il membro che si desidera abilitare.

  • Aggiungere la nuova classe all'elenco consentiti.

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

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

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

Per aggiungere un tipo generico o un tipo che ammette valori Null di Visual Basic .NET Framework, è necessario effettuare le operazioni seguenti:

  • Creare un tipo proxy per il tipo generico o che ammette valori Null di Visual Basic .NET Framework.

  • Aggiungere il tipo di proxy all'elenco consentiti.

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

Gestione dell'elenco di membri <Deny>

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

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

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

  • Quando si aggiorna .NET Framework nel server di report.

  • 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 successivamente, dal momento che è probabile che nuovi membri siano stati aggiunti ai tipi RDL.

Utilizzo di operatori e dell'operatore New

Per impostazione predefinita, gli operatori di linguaggio di Visual Basic .NET Framework sono sempre consentiti, eccetto per New. L'operatore New viene controllato dall'attributo AllowNew sull'elemento <Allow>. Altri operatori di linguaggio, ad esempio l'operatore della funzione di accesso alla raccolta predefinito ! e le macro di cast di Visual Basic .NET Framework, ad esempio CInt, sono sempre consentiti.

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

  • Creare un tipo di proxy che non implementa gli operatori che si desidera escludere.

  • Aggiungere il tipo di proxy all'elenco consentiti.

Per creare una nuova matrice in un'espressione RDL, creare la matrice in un metodo in una classe definita e aggiungere quella classe all'elenco 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 in quella classe.

  • Aggiungere la classe all'elenco consentiti.