Безопасность доступа к коду в службах Reporting Services

Управление доступом для кода основывается на следующих базовых понятиях: свидетельство, группы кода и именованные наборы разрешений. В службах Reporting Services диспетчер отчетов, конструктор отчетов и компоненты сервера отчетов имеют файл политики, который настраивает безопасность доступа к коду для пользовательских сборок. Этот файл политики также настраивает доступ к коду для данных, доставки, отрисовки и расширений безопасности. В следующих разделах приведены общие сведения об управлении доступом для кода. Дополнительные сведения о статьях, описанных в этом разделе, см. в разделе "Модель политики безопасности" в документации по пакету SDK для Microsoft платформа .NET Framework.

Службы Reporting Services используют безопасность доступа к коду, так как, хотя сервер отчетов основан на технологии ASP.NET, существует существенное различие между типичным приложением ASP.NET и сервером отчетов. Обычное приложение ASP.NET не выполняет пользовательский код. В отличие от этого, в службах Reporting Services используется открытая и расширяемая архитектура, которая позволяет пользователям писать программы с использованием файлов определения отчетов, применяя элемент Code языка определения отчетов, а также разрабатывать специализированные функции в составе пользовательских сборок для применения в отчетах. Кроме того, разработчики могут проектировать и развертывать мощные модули, которые расширяют возможности сервера отчетов. Эта сила и гибкость поступают с необходимостью обеспечить максимальное количество защиты и безопасности.

Разработчики служб Reporting Services могут использовать любую сборку .NET Framework в своих отчетах и вызывать непосредственно в коде все функции сборок, развернутых в глобальном кэше сборок. Сервер отчетов может управлять только разрешениями, предоставляемыми для выражений отчета и загруженных пользовательских сборок. В службах Reporting Services пользовательские сборки по умолчанию получают разрешения только на выполнение.

Свидетельство

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

И сборки, и домены приложений получают разрешения на основе свидетельства. Например, информация о местоположении сборки, к которой пытаются получить доступ службы Reporting Services, является одной из общих форм свидетельства для сборок со слабыми именами. Этот пример называется свидетельством URL-адреса. Url-адрес для пользовательского модуля обработки данных, развернутого на сервере отчетов, может быть C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll. Еще одной широко применяемой формой свидетельства является строгое имя или цифровая подпись сборки. В этом случае свидетельством является информация открытого ключа для сборки.

Группы кода

Группа кода представляет собой логическое группирование кода, для определения принадлежности к который применяется определенное условие. Любой код, который соответствует условию членства, включается в группу. Администраторы настраивают политику безопасности для управления группами кода и связанными с ними наборами разрешений.

Условие членства для группы кода основано на свидетельстве. Например, членство URL-адреса для группы кода основано на свидетельстве URL-адреса. В среде CLR для описания кода и определения того, соблюдено ли условие членства в группе, применяются такие идентифицирующие характеристики, как свидетельство URL-адреса. Например, если условием членства в группе кода является то, что «код находится в сборке C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll», среда выполнения проверяет это свидетельство и определяет, действительно ли код получен из этого местоположения. Пример записи конфигурации для этой группы кода может выглядеть следующим образом:

<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\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.FsiDataExtension.dll"  
       />  
</CodeGroup>  

Необходимо работать совместно с системным администратором или экспертом по развертыванию приложений, чтобы определить тип управления доступом для кода и групп кода, которые требуются для пользовательских сборок или модулей служб Reporting Services.

Именованные наборы разрешений

Именованный набор разрешений представляет собой множество разрешений, которые администраторы могут связать с группой кода. Большинство именованных наборов разрешений состоит, по меньшей мере, из одного разрешения, имени и описания для набора разрешений. Администраторы могут использовать именованные наборы разрешений для установки или изменения политики безопасности для групп кода. С одним и тем же именованным набором разрешений может быть связано несколько групп кода. Среда CLR предоставляет встроенные именованные наборы разрешений, такие как Nothing, Execution, Internet, LocalIntranet, Everything и FullTrust.

Примечание.

Пользовательские модули обработки данных, доставки, подготовки отчетов и безопасности в службах Reporting Services должны запускаться с набором разрешений FullTrust. Необходимо работать совместно с системным администратором, чтобы добавить соответствующие группы кода и условия членства для пользовательских модулей служб Reporting Services.

Можно связать собственные пользовательские уровни разрешений с пользовательскими сборками, применяемыми в отчетах. Например, если требуется предоставить доступ какой-то сборке к конкретному файлу, можно создать новый именованный набор разрешений с конкретным файловым доступом для ввода-вывода, а затем назначить этот набор разрешений применяемой группе кода. В следующем наборе разрешений предоставляется доступ только для чтения к файлу 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>  

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

<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\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin\MyCustomAssembly.dll"/>  
</CodeGroup>