Управление доступом для кода в службах Reporting Services

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

В службах Службы 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>