Asserzione delle autorizzazioni negli assembly personalizzati

Per impostazione predefinita, il codice degli assembly personalizzati viene eseguito con il set di autorizzazioni Execution limitato. In alcuni casi, è possibile implementare un assembly personalizzato che effettua chiamate protette alle risorse protette all'interno del sistema di sicurezza, ad esempio un file o il Registro di sistema. Per eseguire questa operazione, è necessario eseguire le azioni seguenti:

  1. Identificare le autorizzazioni esatte necessarie per il codice per effettuare la chiamata protetta. Se questo metodo è parte di una libreria Microsoft .NET Framework, queste informazioni devono essere incluse nella documentazione del metodo.

  2. Modificare i file di configurazione dei criteri del server di report per concedere le autorizzazioni necessarie all'assembly personalizzato. Per altre informazioni sui file di configurazione dei criteri di sicurezza, vedere Uso di file di criteri di sicurezza di Reporting Services.

  3. Eseguire l'asserzione delle autorizzazioni necessarie come parte del metodo nel quale viene effettuata la chiamata protetta. Questa operazione è necessaria in quanto il codice dell'assembly personalizzato chiamato dal server di report fa parte dell'assembly host delle espressioni di report che, per impostazione predefinita, viene eseguito con l'autorizzazione di esecuzione. Il set di autorizzazioni Execution consente al codice di essere eseguito, ma non di usare risorse protette.

  4. Contrassegnare l'assembly personalizzato con AllowPartiallyTrustedCallersAttribute se è firmato con un nome sicuro. Ciò è necessario perché gli assembly personalizzati vengono chiamati da un'espressione del report che fa parte dell'assembly host dell'espressione di report, che, per impostazione predefinita, non viene concesso FullTrust, pertanto si tratta di un chiamante "parzialmente attendibile". Per altre informazioni, vedere Uso di assembly personalizzati con nome sicuro.

Implementare una chiamata sicura

È possibile modificare i file di configurazione dei criteri per concedere autorizzazioni specifiche all'assembly. Se, ad esempio, si scrive un assembly personalizzato per gestire la conversione delle valute, potrebbe essere necessario leggere i tassi di cambio della valuta correnti da un file. Per recuperare le informazioni sulla frequenza, è necessario aggiungere un'autorizzazione di sicurezza aggiuntiva, FileIOPermission, al set di autorizzazioni per l'assembly. Nel file di configurazione dei criteri è possibile inserire le seguenti voci aggiuntive:

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

Viene quindi aggiunto un gruppo di codice che fa riferimento a tale set di autorizzazioni:

<CodeGroup class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="CurrencyRatesFilePermissionSet"  
   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\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>  
</CodeGroup>  

Per consentire al codice di acquisire l'autorizzazione appropriata, è necessaria l'asserzione dell'autorizzazione nel codice dell'assembly personalizzato. Se, ad esempio, si desidera aggiungere l'accesso in sola lettura a un file XML, C:\CurrencyRates.xml, è necessario aggiungere al metodo il codice seguente:

// C#  
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");  
try  
{  
   permission.Assert();  
   // Load the XML currency rates file  
   XmlDocument doc = new XmlDocument();  
   doc.Load(@"C:\CurrencyRates.xml");  
...  

È inoltre possibile aggiungere l'asserzione come attributo del metodo:

[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]  

Per ulteriori informazioni, vedere l'argomento relativo alla sicurezza di .NET Framework nella Guida per gli sviluppatori di .NET Framework.

Uso di assembly personalizzati con i report