Protezione dall'accesso di codice in Reporting Services

La protezione dall'accesso di codice si basa su tre concetti principali, ovvero evidenza, gruppi di codice e set di autorizzazione denominati. In Reporting Services i componenti Gestione report, Progettazione report e server di report dispongono ognuno di un file di criteri che configura la protezione dall'accesso di codice per assembly personalizzati ed estensioni per i dati, il recapito, il rendering e di protezione. Nelle sezioni seguenti viene fornita una panoramica sulla protezione dall'accesso di codice. Per ulteriori informazioni sugli argomenti trattati in questa sezione, vedere la sezione relativa al modello dei criteri di protezione nella documentazione di Microsoft.NET Framework SDK.

In Reporting Services la protezione dall'accesso di codice viene utilizzata perché, anche se il server di report è creato in base a tecnologia ASP.NET, è presente una differenza sostanziale tra un'applicazione ASP.NET tipica e il server di report. Mentre un'applicazione ASP.NET tipica non esegue codice utente, Reporting Services utilizza un'architettura aperta ed estensibile che consente agli utenti di programmare in base ai file di definizione del report utilizzando l'elemento Code di Report Definition Language e di sviluppare funzionalità specifiche in un assembly personalizzato da utilizzare nei report. Gli sviluppatori possono inoltre progettare e distribuire estensioni potenti che consentono di ottimizzare le funzionalità del server di report. Queste caratteristiche di potenza e flessibilità determinano la necessità di utilizzare il maggior livello di protezione possibile.

Gli sviluppatori di Reporting Services possono utilizzare qualsiasi assembly di .NET Framework nei report e sfruttare tutte le funzionalità degli assembly distribuiti nella cache di assembly globale (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 un criterio di protezione 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 cui Reporting Services sta eseguendo l'accesso è ad esempio una forma comune di evidenza per assembly con nome non sicuro, nota come evidenza URL. L'evidenza URL per un'estensione per l'elaborazione dei dati personalizzata distribuita in un server di report potrebbe essere "C:\Programmi\Microsoft SQL Server\MSSQL\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 protezione 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\MSSQL\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 una voce di configurazione per questo tipo di gruppo di codice potrebbe essere analogo al 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\MSSQL\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"
       />
</CodeGroup>

Per determinare il tipo di protezione 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 protezione per i gruppi di codice. A uno stesso set di autorizzazioni denominati possono essere associati più gruppi di codice. In CLR sono disponibili set di autorizzazioni denominati, ad esempio Nothing, Execution, Internet, LocalIntranet, Everything e FullTrust.

[!NOTA]

Le estensioni per dati personalizzati, il recapito, il rendering e di protezione 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 cui si concede questo set di autorizzazioni potrebbe essere analogo al 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\MSSQL\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>
</CodeGroup>