Утверждение разрешений в пользовательских сборках

По умолчанию пользовательский код сборки выполняется с ограниченным набором разрешений выполнения . В некоторых случаях может потребоваться реализовать пользовательскую сборку, которая вызывает защищенные вызовы защищенных ресурсов в системе безопасности (например, файл или реестр). Для этого необходимо выполнить следующее:

  1. Определите точные разрешения, необходимые коду для выполнения защищенного вызова. Если этот метод является частью библиотеки Microsoft .NET Framework, эти сведения должны быть включены в документацию по методу.

  2. Измените файлы конфигурации политики сервера отчетов, чтобы предоставить пользовательской сборке необходимые разрешения. Дополнительные сведения о файлах конфигурации политики безопасности см. в разделе "Использование файлов политик безопасности служб Reporting Services".

  3. Утверждение необходимых разрешений в рамках метода, в котором выполняется безопасный вызов. Это необходимо, так как пользовательский код сборки, вызываемый сервером отчетов, является частью сборки узла выражения отчета, которая выполняется с разрешением на выполнение по умолчанию. Набор разрешений выполнения позволяет выполнять код, но не использовать защищенные ресурсы.

  4. Пометьте пользовательскую сборку с помощью AllowPartiallyTrustedCallersAttribute , если она подписана строгим именем. Это необходимо, так как пользовательские сборки вызываются из выражения отчета, являющегося частью сборки узла выражения отчета, которая по умолчанию не предоставляется FullTrust; таким образом, это "частично доверенный" вызывающий объект. Дополнительные сведения см. в разделе "Использование пользовательских сборок Strong-Named".

Реализация безопасного вызова

Вы можете изменить файлы конфигурации политики, чтобы предоставить определенные разрешения сборки. Например, если вы написали пользовательскую сборку для обработки преобразования валют, может потребоваться считывать текущие валютные курсы из файла. Чтобы получить сведения о скорости, необходимо добавить дополнительное разрешение безопасности FileIOPermission в набор разрешений для сборки. В файле конфигурации политики можно внести следующую дополнительную запись:

<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>  

Затем вы добавите группу кода, которая ссылается на этот набор разрешений:

<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>  

Чтобы код получил соответствующее разрешение, необходимо подтвердить разрешение в пользовательском коде сборки. Например, если вы хотите добавить доступ только для чтения к XML-файлу, C:\CurrencyRates.xml, необходимо добавить следующий код в метод:

// 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");  
...  

Можно также добавить утверждение в качестве атрибута метода:

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

Дополнительные сведения см. в разделе "Безопасность .NET Framework" в руководстве разработчика .NET Framework.

См. также

Использование пользовательских сборок с отчетами