Abilitare e disabilitare RDL Sandboxing per Reporting Services in modalità integrata SharePoint

Si applica a: SQL Server Reporting Services (2016) SharePoint ❌ Server di report di Power BI

Per contenuti relativi a versioni precedenti di SQL Server Reporting Services (SSRS), si veda Che cos’è SQL Server Reporting Services?

La funzionalità RDL (Report Definition Language) Sandboxing consente di rilevare e limitare l'uso di tipi specifici di risorse in base a singoli tenant in un ambiente in cui più tenant usano una sola Web farm di server di report. Un esempio è rappresentato dai servizi di hosting in cui è possibile gestire una sola Web farm di server di report utilizzati da più tenant e 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.

Nota

L'integrazione di Reporting Services con SharePoint non è più disponibile nelle versioni successive a SQL Server 2016.

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 RDL precedenti per gli elementi del report personalizzati di SQL Server 2005 Reporting Services (SSRS).

  • Parametri denominati nelle espressioni.

In questo articolo viene descritto 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). Attività dei record del log di traccia del server correlata alla caratteristica RDL Sandboxing. Per altre 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
Tipi Elenco di membri da consentire nelle espressioni RDL.
Consenti Tipo o set di tipi da consentire nelle espressioni RDL.
Spazio dei nomi Attributo per Allow che è lo spazio dei nomi contenente uno o più tipi applicabili a Value. Questa proprietà supporta la distinzione tra maiuscole e minuscole.
AllowNew Attributo booleano per Allow che definisce se le nuove istanze del tipo possono essere create in espressioni RDL o in un elemento RDL <Class>.

Quando RDLSandboxing è abilitato non è possibile creare nuove matrici in 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 sono consentiti tutti i tipi nello spazio dei nomi. Questa proprietà supporta la distinzione tra maiuscole e minuscole.
Membri Valore per l'elenco dei tipi presenti nell'elemento <Types> e l'elenco dei nomi dei membri non consentiti nelle espressioni RDL.
Nega Nome di un membro non consentito nelle espressioni RDL. Questa proprietà supporta la distinzione tra maiuscole e minuscole.

Quando per un membro è specificato Deny non è consentito nessun membro con questo nome per nessun tipo.

Uso 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 funzionalità di sandbox RDL consente di creare un elenco di tipi approvati e un elenco dei membri negati. L'elenco dei tipi approvati è denominato allowlist. L'elenco di membri non autorizzati viene denominato blocklist.

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’allowlist.

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 altre informazioni, vedere Report Server Service Trace Log.

Uso dei tipi

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

  • Membri statici di un tipo.

  • Metodo Visual Basic ```New``.

  • Elemento <Classes> nella definizione del report.

  • Membri aggiunti al blocklist per un tipo nell’allowlist.

L’allowlist 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 del report. I valori dei parametri forniti dall'utente potrebbero contenere qualsiasi tipo RDL valido.

  • Membri di un tipo abilitato non inclusi nel blocklist. Per impostazione predefinita, vengono abilitati tutti i membri di tutti i tipi nell'allowlist. Quando si aggiunge il nome di un membro al blocklist, vengono negati tutti i membri con quel nome in tutti i tipi nell'allowlist.

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

  • Aggiungere un elemento <Deny> per il nome 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'allowlist.

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

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

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

Per aggiungere un tipo nullable generico o di .NET Framework di Visual Basic all'allowlist, è necessario eseguire queste operazioni:

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

  • Aggiungere il tipo di proxy all'allowlist.

L'aggiunta di un tipo da un assembly personalizzato all'allowlist 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 altre informazioni, vedere Sicurezza dall'accesso di codice in Reporting Services.

Gestione dell'elenco di membri <Deny>

Quando si aggiunge un nuovo tipo all'allowlist, attenersi all'elenco seguente per determinare quando potrebbe essere necessario aggiornare il blocklist:

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

  • Quando si aggiungono membri ai tipi nell'allowlist.

  • 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.

Uso degli operatori e dell'operatore New

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

L'aggiunta di operatori, inclusi quelli personalizzati, a un blocklist non è supportata. Per escludere operatori per un tipo, è necessario effettuare le attività:

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

  • Aggiungere il tipo di proxy all'allowlist.

Per creare una nuova matrice in un'espressione RDL, creare la matrice in un metodo in una classe definita e aggiungere quella classe all’allowlist.

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

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

  • Aggiungere la classe all’allowlist.