Безопасность доступа к коду в службах 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>