Asserzione di autorizzazioni negli assembly personalizzatiAsserting Permissions in Custom Assemblies

Per impostazione predefinita, il codice assembly personalizzato viene eseguito con la limitazione esecuzione set di autorizzazioni.By default, custom assembly code runs with the limited Execution permission set. In alcuni casi, potrebbe essere necessario implementare un assembly personalizzato per l'esecuzione di chiamate protette alle risorse protette all'interno del sistema di sicurezza (ad esempio un file o il Registro di sistema).In some cases, you may wish to implement a custom assembly that makes secured calls to protected resources within your security system (such as a file or the registry). A tale scopo, è necessario effettuare le operazioni seguenti:In order to accomplish this, you must do the following:

  1. Identificare le autorizzazioni esatte necessarie per il codice per effettuare la chiamata protetta.Identify the exact permissions that your code needs in order to make the secured call. Se questo metodo fa parte di un MicrosoftMicrosoft .NET Framework.NET Framework libreria, queste informazioni devono essere inclusi nella documentazione del metodo.If this method is part of a MicrosoftMicrosoft .NET Framework.NET Framework library, this information should be included in the method documentation.

  2. Modificare i file di configurazione dei criteri del server di report per concedere le autorizzazioni necessarie all'assembly personalizzato.Modify the report server policy configuration files in order to grant the custom assembly the required permissions. Per ulteriori informazioni sui file di configurazione dei criteri di sicurezza, vedere tramite Reporting Services Security Policy Files.For more information about the security policy configuration files, see Using Reporting Services Security Policy Files.

  3. Eseguire l'asserzione delle autorizzazioni necessarie come parte del metodo nel quale viene effettuata la chiamata protetta.Assert the required permissions as part of the method in which the secure call is made. Questa operazione è necessaria perché il codice assembly personalizzato che viene chiamato dal server di report fa parte di report assembly host delle espressioni, che viene eseguito con esecuzione dell'autorizzazione per impostazione predefinita.This is required because the custom assembly code that is called by the report server is part of the report expression host assembly, which runs with Execution permission by default. Il esecuzione set di autorizzazioni consente al codice per l'esecuzione, ma non è consigliabile usare risorse protette.The Execution permission set enables code to run, but not to use protected resources.

  4. Contrassegnare l'assembly personalizzato con AllowPartiallyTrustedCallersAttribute se è firmato con un nome sicuro.Mark the custom assembly with AllowPartiallyTrustedCallersAttribute if it is signed with a strong name. Questa operazione è necessaria perché gli assembly personalizzati vengono chiamati da un'espressione di report che fa parte di report assembly host delle espressioni, che, per impostazione predefinita, non viene concessa FullTrust; pertanto, è un chiamante "parzialmente attendibile".This is required because custom assemblies are called from a report expression that is part of the report expression host assembly, which, by default, is not granted FullTrust; thus it is a "partially trusted" caller. Per ulteriori informazioni, vedere uso degli assembly personalizzati.For more information, see Using Strong-Named Custom Assemblies.

Implementazione di una chiamata protettaImplementing a Secure Call

È possibile modificare i file di configurazione dei criteri per concedere autorizzazioni specifiche all'assembly.You can modify the policy configuration files to grant your assembly specific permissions. 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.For example, if you were writing a custom assembly to handle currency conversion, you might need to read the current currency exchange rates from a file. Per recuperare le informazioni sulla frequenza, è necessario aggiungere un'ulteriore autorizzazioni di sicurezza, FileIOPermission, al set di autorizzazioni per l'assembly.To retrieve the rate information, you would need to add an additional security permission, FileIOPermission, to your permission set for the assembly. Nel file di configurazione dei criteri è possibile inserire le seguenti voci aggiuntive:You can make the following additional entry in the policy configuration file:

<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:You then add a code group that references that permission set:

<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.In order for your code to acquire the appropriate permission, you must assert the permission within your custom assembly code. 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:For example, if you want to add read-only access to an XML file, C:\CurrencyRates.xml, you must add the following code to your method:

// 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:You can also add the assertion as a method attribute:

[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.For more information, see ".NET Framework Security" in the .NET Framework Developer's Guide.

Vedere ancheSee Also

Uso di assembly personalizzati con i reportUsing Custom Assemblies with Reports