Поделиться через


Общие сведения о политиках безопасности

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

Сборки сервера отчетов

Сборки сервера отчетов содержат код, который является частью продукта Служб Reporting Services. Службы Reporting Services написаны с помощью сборок управляемого кода; все эти сборки имеют строгие имена (подписанные цифровой подписью). Группы кода для этих сборок определены с использованием условия StrongNameMembershipCondition, которое предоставляет свидетельство на основе информации открытого ключа для строгого имени сборки. Группе кода предоставляется набор разрешений FullTrust.

Расширения сервера отчетов (отрисовка, данные, доставка и безопасность)

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

Важно!

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

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

Выражения, используемые в отчетах

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

<CodeGroup  
   class="UnionCodeGroup"  
   version="1"  
   PermissionSetName="Execution"  
   Name="Report_Expressions_Default_Permissions"  
   Description="This code group grants default permissions for code in report expressions and Code element. ">  
    <IMembershipCondition  
       class="StrongNameMembershipCondition"  
       version="1"  
       PublicKeyBlob="002400..."  
    />  
</CodeGroup>  

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

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

Важно!

Код, предназначенный для использования в отчетах, в котором вызываются внешние сборки или защищенные ресурсы, должен быть включен в пользовательскую сборку. Это позволяет получить больший контроль над разрешениями, запрашиваемыми и подтверждаемыми в коде. Не следует выполнять вызовы защищенных методов в элементе Code. Для этого необходимо предоставить разрешения FullTrust хранилищу выражений отчета и обеспечить полный доступ к среде CLR для всего пользовательского кода.

Внимание

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

Пользовательские сборки, на которые ссылаются отчеты

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

В некоторых случаях может потребоваться выполнить операцию, требующую определенных разрешений кода в выражении отчета. Как правило, этот сценарий означает, что выражение отчета должно вызывать защищенный метод библиотеки CLR (например, доступ к файлам или системному реестру). В документации по платформа .NET Framework описаны разрешения кода, необходимые для выполнения этого безопасного вызова. Чтобы выполнить вызов, код вызова должен быть предоставлен этим конкретным, безопасным разрешениям. Если вызов выполняется из выражения отчета или элемента Code, то хранилищу сборки выражений нужно предоставить соответствующие разрешения. Но сразу после предоставления этих разрешений хранилищу выражений весь код, выполняемый в любом выражении любого отчета, получает такие же конкретные разрешения. Это гораздо безопаснее, чтобы выполнить вызов из пользовательской сборки и предоставить этой пользовательской сборке определенные разрешения.