Sicurezza dell'accesso al codice in Reporting Services

La sicurezza dall'accesso di codice si basa su tre concetti principali, ovvero evidenza, gruppi di codice e set di autorizzazione denominati. In Reporting Services, gestione report, Progettazione report e componenti del server di report dispongono di un file di criteri che configura la sicurezza dell'accesso di codice per gli assembly personalizzati. Questo file di criteri configura anche l'accesso al codice per i dati, il recapito, il rendering e le estensioni di sicurezza. Nelle sezioni seguenti viene fornita una panoramica sulla sicurezza dall'accesso di codice. Per informazioni più dettagliate sugli articoli trattati in questa sezione, vedere "Modello di criteri di sicurezza" nella documentazione di Microsoft .NET Framework SDK.

Reporting Services usa la sicurezza dell'accesso al codice perché, anche se il server di report è basato sulla tecnologia ASP.NET, esiste una differenza sostanziale tra un'applicazione ASP.NET tipica e il server di report. Un'applicazione ASP.NET tipica non esegue il codice utente. Reporting Services usa un'architettura aperta ed estensibile che consente agli utenti di programmare in base ai file di definizione del report usando l'elemento Code di Report Definition Language e di sviluppare funzionalità specifiche in un assembly personalizzato da usare nei report. Gli sviluppatori possono inoltre progettare e distribuire estensioni potenti che consentono di ottimizzare le funzionalità del server di report. Questa potenza e flessibilità è necessaria per garantire la massima protezione e sicurezza possibile.

Gli sviluppatori di Reporting Services possono usare qualsiasi assembly di .NET Framework nei report e sfruttare tutte le funzionalità degli assembly distribuiti nella Global Assembly Cache (CAG). L'unico elemento che il server di report può controllare sono le autorizzazioni concesse per le espressioni del report e per gli assembly personalizzati caricati. In Reporting Services per impostazione predefinita agli assembly personalizzati vengono concesse solo le autorizzazioni Execute.

Evidenza

Per evidenza si intendono le informazioni utilizzate da Common Language Runtime (CLR) per stabilire criteri di sicurezza per gli assembly del codice. In fase di esecuzione l'evidenza indica che al codice sono associate caratteristiche specifiche. Forme comuni di evidenza includono ad esempio le firme digitali e il percorso di un assembly. È possibile inoltre personalizzare l'evidenza per rappresentare altre informazioni significative per l'applicazione.

Sia agli assembly che ai domini applicazione vengono concesse autorizzazioni sulla base dell'evidenza. Il percorso di un assembly a cui Reporting Services sta provando ad accedere è ad esempio una forma comune di evidenza per assembly con nome non sicuro, Questo esempio è noto come evidenza URL. L'evidenza dell'URL per un'estensione per l'elaborazione dati personalizzata distribuita in un server di report potrebbe essere C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll. Il nome sicuro o firma digitale di un assembly è un altra forma comune di evidenza. In questo caso, l'evidenza è rappresentata dalle informazioni sulla chiave pubblica per un assembly.

Gruppi di codice

Un gruppo di codice è un raggruppamento logico di codice per appartenere al quale è necessario rispettare a una specifica condizione. Ogni codice che soddisfa la condizione di appartenenza viene incluso nel gruppo. Gli amministratori configurano i criteri di sicurezza mediante la gestione dei gruppi di codice e dei set di autorizzazioni associati.

Una condizione di appartenenza per un gruppo di codice si basa sull'evidenza. Un'appartenenza URL per un gruppo di codice, ad esempio, si basa sull'evidenza URL. Per descrivere il codice e per verificare se è stata soddisfatta la condizione di appartenenza a un gruppo, Common Language Runtime utilizza le caratteristiche di identificazione, ovvero l'evidenza URL. Ad esempio, se la condizione di appartenenza di un gruppo di codice è "codice nell'assembly C:\Programmi\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll", in fase di esecuzione viene esaminata l'evidenza per determinare se il codice ha origine in quel percorso. Un esempio di voce di configurazione per questo tipo di gruppo di codice potrebbe essere simile all'esempio seguente:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="FullTrust"  
   Name="MyCodeGroup"  
   Description="Code group for my data processing extension">  
      <IMembershipCondition class="UrlMembershipCondition"  
         version="1"  
         Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"  
       />  
</CodeGroup>  

Per determinare il tipo di sicurezza dall'accesso di codice e i gruppi di codice necessari agli assembly personalizzati o alle estensioni di Reporting Services, è necessario rivolgersi all'amministratore di sistema o agli esperti di distribuzione di applicazioni.

Set di autorizzazioni denominati

Un set di autorizzazioni denominato è un set di autorizzazioni che gli amministratori possono associare a un gruppo di codice. La maggior parte dei set di autorizzazioni è costituito almeno da un'autorizzazione, un nome e una descrizione per il set stesso. Gli amministratori possono utilizzare i set di autorizzazioni denominati per stabilire o modificare i criteri di sicurezza per i gruppi di codice. A uno stesso set di autorizzazioni denominati possono essere associati più gruppi di codice. CLR fornisce set di autorizzazioni denominati predefiniti, ad esempio Nothing, Execution, Internet, LocalIntranet, Everything e FullTrust.

Nota

Le estensioni per dati personalizzati, recapito, rendering e di sicurezza in Reporting Services devono essere eseguite con il set di autorizzazioni FullTrust. Per aggiungere il gruppo di codice appropriato e le condizioni di appartenenza per le estensioni di Reporting Services, rivolgersi all'amministratore di sistema.

È possibile associare livelli personalizzati di autorizzazioni per assembly personalizzati utilizzati con i report. Se ad esempio si desidera consentire a un assembly di accedere a un file specifico, è possibile creare un nuovo set di autorizzazioni denominato con accesso I/O al file specifico e assegnare quindi il set di autorizzazioni al gruppo di codice. Nel set di autorizzazioni seguente viene concesso l'accesso in sola lettura al file MyFile.xml:

<PermissionSet class="NamedPermissionSet"  
   version="1"  
   Name="MyNewFilePermissionSet"  
   Description="A special permission set that grants read access to my file.">  
    <IPermission class="FileIOPermission"  
       version="1"  
       Read="C:\MyFile.xml"/>  
    <IPermission class="SecurityPermission"  
       version="1"  
       Flags="Assertion, Execution"/>  
</PermissionSet>  

Un gruppo di codice a cui si concede questo set di autorizzazioni potrebbe essere simile all'esempio seguente:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="MyNewFilePermissionSet"  
   Name="MyNewCodeGroup"  
   Description="A special code group for my custom assembly.">  
   <IMembershipCondition class="UrlMembershipCondition"  
      version="1"  
      Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>  
</CodeGroup>