Informazioni sui criteri di sicurezza

Qualsiasi codice eseguito da un server di report deve far parte di uno specifico criterio di sicurezza dell'accesso al codice. Tali criteri di sicurezza sono costituiti da gruppi di codice che eseguono il mapping dell'evidenza a un insieme di set di autorizzazioni denominati. I gruppi di codice sono spesso associati a un set di autorizzazioni denominato che specifica le autorizzazioni consentite per il codice appartenente al gruppo specifico. In fase di esecuzione l'evidenza viene usata da un host trusted o dal caricatore per determinare i gruppi di codice cui il codice appartiene e, di conseguenza, le autorizzazioni per concedere il codice. Il prodotto Reporting Services rispetta questa architettura dei criteri di sicurezza, definita da CLR (Common Language Runtime) di Microsoft .NET Framework. Nelle sezioni seguenti vengono descritti i diversi tipi di codice in Reporting Services e le regole dei criteri associate.

Assembly del server di report

Gli assembly del server di report contengono codice che fa parte del prodotto Reporting Services. Il prodotto Reporting Services viene scritto usando assembly del codice gestito. Tutti questi assembly hanno un nome sicuro, ossia sono firmati digitalmente. I gruppi di codice per questi assembly vengono definiti usando StrongNameMembershipCondition, che offre evidenza basata sulle informazioni relative alla chiave pubblica per il nome sicuro dell'assembly. Al gruppo di codice viene concesso il set di autorizzazioni FullTrust.

Estensioni del server di report (rendering, dati, recapito e sicurezza)

Le estensioni del server di report sono estensioni per dati personalizzati, per il recapito, per il rendering e di sicurezza create dall'utente o da terze parti per estendere le funzionalità di Reporting Services. È necessario concedere FullTrust a queste estensioni o codice assembly nei file di configurazione dei criteri associati al componente Reporting Services che si sta estendendo. Le estensioni incluse in Reporting Services sono firmate con la chiave pubblica del server di report e ricevono il set di autorizzazioni FullTrust.

Importante

Per concedere l'autorizzazione FullTrust alle estensioni di terze parti è necessario modificare i file di configurazione dei criteri di Reporting Services. Se non si aggiunge un gruppo di codice con autorizzazione FullTrust per le estensioni personalizzate, queste non potranno essere usate dal server di report.

Per altre informazioni sui file di configurazione dei criteri in Reporting Services, vedere Usare i file dei criteri di sicurezza di Reporting Services.

Espressioni usate nei report

Le espressioni del report sono espressioni di codice inline o metodi definiti dall'utente contenuti nell'elemento Code di un file RDL. Esiste un gruppo di codice già configurato nei file dei criteri che concede queste espressioni al set di autorizzazioni Esecuzione per impostazione predefinita. Il gruppo di codice è simile all'esempio seguente:

<CodeGroup  
   class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="Execution"  
   Name="Report_Expressions_Default_Permissions"  
   Description="This code group grants default permissions for code in report expressions and Code element. ">  
    <IMembershipCondition  
       class="StrongNameMembershipCondition"  
       version="1"  
       PublicKeyBlob="002400..."  
    />  
</CodeGroup>  

L'autorizzazione Execution consente l'esecuzione del codice che non può tuttavia usare le risorse protette. Tutte le espressioni presenti all'interno di un report vengono compilate in un assembly (denominato assembly "delle espressioni") archiviato come parte del report compilato. Quando il report viene eseguito, il server di report carica l'assembly delle espressioni ed effettua chiamate in tale assembly per eseguire le espressioni. Gli assembly delle espressioni vengono firmati con una chiave specifica usata per definire il gruppo di codice per tutte le espressioni.

Le espressioni del report fanno riferimento a raccolte di modelli a oggetti del report (campi, parametri e così via) ed eseguono semplici attività, ad esempio operazioni aritmetiche e di stringa. Per il codice che esegue queste semplici operazioni è necessaria solo l'autorizzazione Execution. Per impostazione predefinita, ai metodi definiti dall'utente nell'elemento Code e agli assembly personalizzati viene concessa l'autorizzazione Execution in Reporting Services. Pertanto, per la maggior parte delle espressioni, la configurazione corrente non richiede la modifica dei file dei criteri di sicurezza. Per concedere autorizzazioni aggiuntive agli assembly host di espressioni, un amministratore deve modificare i file di configurazione dei criteri del server di report e Progettazione report e modificare il gruppo di codice delle espressioni del report. Poiché si tratta di un'impostazione globale, la modifica delle autorizzazioni predefinite per gli host di espressioni influisce su tutti i report. Per questo motivo, è consigliabile inserire tutto il codice che richiede maggiore sicurezza in un assembly personalizzato. Solo a questo assembly vengono concesse le autorizzazioni necessarie.

Importante

Affinché sia possibile usarlo nei report, il codice che effettua chiamate ad assembly esterni oppure a risorse protette deve essere incorporato in un assembly personalizzato. In questo modo è possibile esercitare maggiore controllo sulle autorizzazioni richieste e asserite dal codice. È consigliabile non effettuare chiamate ai metodi protetti all'interno dell'elemento Code. Per farlo è infatti necessario concedere l'autorizzazione FullTrust all'host delle espressioni del report e a tutto il codice personalizzato verrà concesso l'accesso completo a CLR.

Attenzione

Non concedere l'autorizzazione FullTrust al gruppo di codice per un host delle espressioni del report. In caso contrario, a tutte le espressioni del report viene consentito di effettuare chiamate di sistema protette.

Assembly personalizzati a cui si fa riferimento nei report

Alcune espressioni di report possono chiamare altri assembly di codice, noti anche in Reporting Services come assembly personalizzati. Per essere usati in un server di report, è necessario che a questi assembly sia concessa almeno l'autorizzazione Execution nei file di configurazione dei criteri. Per impostazione predefinita, i file dei criteri inclusi in Reporting Services concedono l'autorizzazione Execution a tutti gli assembly avviati dall'area Risorse del computer. È possibile concedere autorizzazioni aggiuntive agli assembly personalizzati in base alle esigenze.

In alcuni casi, potrebbe essere necessario eseguire un'operazione che richiede autorizzazioni di codice specifiche in un'espressione di report. In genere, questo scenario indica che un'espressione del report deve effettuare una chiamata a un metodo di libreria CLR protetto, ad esempio uno che accede ai file o al Registro di sistema. La documentazione di .NET Framework descrive le autorizzazioni di codice necessarie per effettuare questa chiamata sicura. Per eseguire la chiamata, al codice chiamante devono essere concesse queste autorizzazioni specifiche e sicure. Se si effettua una chiamata da un'espressione del report o dall'elemento Code è necessario concedere all'assembly delle espressioni le autorizzazioni appropriate. Una volta concesse alle espressioni, tuttavia, le autorizzazioni specifiche vengono concesse a tutto il codice eseguito in tutte le espressioni di qualsiasi report. È molto più sicuro effettuare la chiamata da un assembly personalizzato e concedere all'assembly personalizzato le autorizzazioni specifiche.