Asserzione di autorizzazioni negli assembly personalizzati

Per impostazione predefinita, il codice degli assembly personalizzati viene eseguito con il set limitato di autorizzazioni Execution. In alcuni casi, potrebbe essere necessario implementare un assembly personalizzato per l'esecuzione di chiamate protette alle risorse protette all'interno del sistema di protezione (ad esempio un file o il Registro di sistema). A tale scopo, è necessario effettuare le operazioni 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 ulteriori informazioni sui file di configurazione dei criteri di protezione, vedere Utilizzo di file di criteri di protezione 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 Execution. Il set di autorizzazioni Execution consente al codice di essere eseguito, ma non di utilizzare risorse protette.

  4. Contrassegnare l'assembly personalizzato con AllowPartiallyTrustedCallersAttribute se è firmato con un nome sicuro. Questa operazione è necessaria in quanto gli assembly personalizzati vengono chiamati da un'espressione di report che fa parte dell'assembly host delle espressioni di report a cui, per impostazione predefinita, non viene concesso il set di autorizzazioni FullTrust, pertanto si tratta di un chiamante parzialmente attendibile. Per ulteriori informazioni, vedere Utilizzo di assembly personalizzati con nome sicuro.

Implementazione di una chiamata protetta

È 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 sui tassi, aggiungere un'ulteriore autorizzazioni di protezione, 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\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 protezione di .NET Framework nella Guida per gli sviluppatori di .NET Framework.