Включение и отключение «песочницы» для языка определения отчетов

Функция «песочницы» для языка определения отчетов позволяет обнаруживать и ограничивать использование определенных типов ресурсов отдельными пользователями в среде с многочисленными пользователями, которые используют единственную веб-ферму серверов отчетов. Примером этого является сценарий услуг хост-сервера, в котором может поддерживаться единственная веб-ферма серверов отчетов, применяемая несколькими пользователями, а также, возможно, другими компаниями. Администратор сервера отчетов может включить эту функцию для выполнения следующих задач.

  • Ограничение размера внешних ресурсов. Внешние ресурсы включают изображения, XSLT-файлы и данные карт.

  • Во время публикации отчета ограничить типы и члены, используемые в тексте выражения.

  • Во время выполнения ограничить длину текста и размер возвращаемых значений для выражений.

При включении функции «песочницы» для языка определения отчетов отключаются следующие функции:

  • пользовательский код в элементе определения отчета <Code>;

  • режим обратной совместимости выражений языка определения отчетов для пользовательских элементов отчета Службы SQL Server 2005 Reporting Services;

  • именованные параметры в выражениях.

В этом разделе описывается каждый из элементов, вложенных в элемент <RDLSandboxing> в файле RSReportServer.Config. Дополнительные сведения об изменении этого файла см. в разделе Как изменить файл конфигурации служб Reporting Services. Операции с записями журнала трассировки сервера, связанные с функцией «песочницы» для выражений языка определения отчетов. Дополнительные сведения о журналах трассировки см. в разделе Журнал трассировки службы сервера отчетов.

Пример конфигурации

В следующем примере показаны параметры и примерные значения элемента <RDLSandboxing> в файле RSReportServer.Config.

  <RDLSandboxing>
     <MaxExpressionLength>5000</MaxExpressionLength>
     <MaxResourceSize>5000</MaxResourceSize>
     <MaxStringResultLength>3000</MaxStringResultLength>
     <MaxArrayResultLength>250</MaxArrayResultLength>
     <Types>
        <Allow Namespace=”System.Drawing” AllowNew=”True”>Bitmap</Allow>
        <Allow Namespace=”TypeConverters.Custom” AllowNew=”True”>*</Allow>
     </Types>
     <Members>
        <Deny>Format</Deny>
        <Deny>StrDup</Deny>
     </Members>
  </RDLSandboxing>

Параметры конфигурации

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

Настройка

Описание

MaxExpressionLength

Максимально допустимое число символов в выражении языка определения отчетов.

По умолчанию: 1000

MaxResourceSize

Максимально допустимый размер внешнего ресурса (КБ).

По умолчанию: 100

MaxStringResultLength

Максимально допустимое число символов для возвращаемого значения выражения языка определения отчетов.

По умолчанию: 1000

MaxArrayResultLength

Максимальное число элементов для возвращаемого значения выражения языка определения отчетов, допустимое в массиве.

По умолчанию: 100

Типы

Список членов, разрешенных для выражений языка определения отчетов.

Allow

Тип или набор типов, разрешенных для выражений языка определения отчетов.

Пространство имен

Атрибут для элемента Allow, представляющий пространство имен, содержащее один или несколько типов, применимых к атрибуту Value. Это свойство учитывает регистр символов.

AllowNew

Логический атрибут элемента Allow, указывающий, разрешено ли создание новых экземпляров этого типа в выражениях языка определения отчетов или в элементах языка определения отчетов <Class>.

ПримечаниеПримечание
Если режим RDLSandboxing разрешен, то новые массивы не могут создаваться в выражениях языка определения отчетов, независимо от настроек AllowNew.

Значение

Значение элемента Allow, представляющее имя типа, разрешенного в выражениях языка определения отчетов. Значение * показывает, что разрешены все типы в пространстве имен. Это свойство учитывает регистр символов.

Члены

Для списка типов, включенных в элемент <Types>, представляет список имен членов, запрещенных в выражениях языка определения отчетов.

Запретить

Имя члена, запрещенного в выражении языка определения отчетов. Это свойство учитывает регистр символов.

ПримечаниеПримечание
Если для члена указано Deny, то все члены всех типов с этим именем будут запрещены.

Работа с выражениями в режиме «песочницы» для выражений языка определения отчетов

Функцию «песочницы» для выражений языка определения отчетов можно изменить, чтобы обеспечить управление ресурсами, используемыми в выражении, следующим образом:

  • ограничение количества символов, используемых в выражении;

  • ограничение размера результата, возвращаемого выражением;

  • разрешение списка определенных типов, которые могут быть использованы в выражении;

  • ограничение списка членов по именам для списка разрешенных типов, которые могут быть использованы в выражении;

  • функция «песочницы» для выражений языка определения отчетов позволяет создать список разрешенных типов и список запрещенных членов. Список разрешенных типов называется списком разрешений. Список запрещенных членов называется списком блокировок.

ПримечаниеПримечание

В определении отчета компьютеру неизвестны типы всех экземпляров в справочниках выражений служб. При добавлении члена к списку блокировок в списке разрешений блокируются все члены всех типов с этим именем.

Проверка результатов выражений языка определения отчетов производится во время выполнения. Выражения языка определения отчетов проверяются в определении отчета при публикации отчета. Наблюдение за журналом трассировки сервера отчетов на наличие нарушений. Дополнительные сведения см. в разделе Журнал трассировки службы сервера отчетов.

Работа с типами

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

  • статические члены этого типа;

  • метод Visual BasicNew;

  • элемент <Classes> в определении отчета;

  • члены, добавленные к списку блокировок, для типа в списке разрешений.

Список разрешений не управляет следующими точками входа:

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

  • параметры отчета. Указанные пользователем значения параметров могут содержать любой допустимый тип выражения языка определения отчетов;

  • члены разрешенного типа, не состоящие в списке блокировок. По умолчанию разрешены все члены всех типов в списке разрешений. При добавлении имени члена к списку блокировок в списке разрешений блокируются все члены всех типов с этим именем.

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

  • добавить к имени члена элемент <Deny>;

  • в пользовательской сборке создать в классе член-посредник с другим именем для того члена, который необходимо разрешить;

  • добавить этот новый класс к списку разрешений.

Чтобы добавить функции Visual Basic .NET Framework к списку разрешений, добавьте к списку разрешений соответствующие типы из пространства имен Microsoft.VisualBasic.

Чтобы добавить ключевые слова, определяющие тип Visual Basic .NET Framework, добавьте к списку разрешений соответствующий тип CLR. Например, чтобы использовать ключевое слово Visual Basic .NET Framework Integer, добавьте к элементу <RDLSandboxing> следующий фрагмент XML:

<Allow Namespace="System">Int32</Allow>

Чтобы добавить универсальный или допускающий значения NULL тип .NET Framework Visual Basic к списку разрешений, выполните следующие действия:

  • создайте тип-посредник для универсального или допускающего значения NULL типа .NET Framework Visual Basic;

  • добавьте тип-посредник к списку разрешений.

При добавлении типа из пользовательской сборки к списку разрешений для сборки неявное предоставление разрешения на выполнение не выполняется. Необходимо специально изменить файл управления доступом для кода, предоставив разрешение на выполнение для данной сборки. Дополнительные сведения см. в разделе Управление доступом для кода в службах Reporting Services.

Обслуживание списка <Deny> для членов

В следующем списке показано, когда необходимо обновление списка заблокированных членов при добавлении нового типа к списку разрешений:

  • при обновлении пользовательской сборки до версии, в которой вводятся новые типы;

  • при добавлении новых членов к типам в списке разрешений;

  • при обновлении .NET Framework на сервере отчетов;

  • при обновлении сервера отчетов до последней версии служб Службы Reporting Services;

  • при обновлении сервера отчетов для обработки последней схемы языка определения отчетов при добавлении новых членов к типам языка определения отчетов.

Работа с операторами и оператором New

По умолчанию все операторы языка Visual Basic .NET Framework, кроме New, всегда разрешены. Оператор New управляется атрибутом AllowNew элемента <Allow>. Другие операторы языка, такие как оператор метода доступа коллекции по умолчанию, оператор !, и макросы приведения Visual Basic .NET Framework, такие как CInt, всегда разрешены.

Добавление операторов к списку заблокированных, включая пользовательские, не поддерживается. Чтобы исключить тип операторов, выполните следующие действия:

  • создайте тип-посредник, не реализующий операторы, которые необходимо исключить;.

  • добавьте тип-посредник к списку разрешений.

Чтобы создать новый массив в выражении языка определения отчетов, создайте массив в определяемом классе и добавьте этот класс к списку разрешений.

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

  • определите новый класс и создайте массив в методе в этом классе;

  • добавьте этот класс к списку разрешений.