Включение и отключение "песочницы" для языка определения отчетов для служб Reporting Services в режиме интеграции с SharePoint

Область применения: SQL Server Reporting Services (2016) SharePoint Сервер отчетов Power BI ❌

Содержимое, связанное с предыдущими версиями SQL Server Reporting Services, см. в статье SQL Server 2014 Reporting Services.

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

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

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

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

Примечание.

Интеграция служб Reporting Services с SharePoint больше не доступна после выхода SQL Server 2016.

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

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

  • Режим обратной совместимости RDL для пользовательских элементов отчета SQL Server 2005 Reporting Services (службы SSRS).

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

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

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

В следующем примере показаны параметры и примерные значения элемента <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>  

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

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

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

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

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

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

По умолчанию — 100
Типы Список членов, разрешенных для выражений языка определения отчетов.
Разрешить Тип или набор типов, разрешенных для выражений языка определения отчетов.
Пространство имен Атрибутом для Allow этого является пространство имен, содержащее один или несколько типов, которые применяются к значению. Это свойство учитывает регистр символов.
AllowNew Логический атрибут для Allow этого определяет, разрешены ли новые экземпляры типа в выражениях RDL или в элементе класса> RDL<.

Если RDLSandboxing этот параметр включен, новые массивы нельзя создавать в выражениях RDL независимо от параметра AllowNew.
Value Значением для Allow этого является имя типа, разрешаемого в выражениях RDL. Значение * показывает, что разрешены все типы в пространстве имен. Это свойство учитывает регистр символов.
Участники Значение для списка типов, которые находятся в <Types> элементе, и список имен элементов, которые не разрешены в выражениях RDL.
Запретить Имя элемента, который не разрешен в выражениях RDL. Это свойство учитывает регистр символов.

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

  • Метод Visual Basic "'New'".

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • При обновлении платформы .NET Framework на сервере отчетов.

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

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

Работа с операторами и новыми операторами

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

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

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

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

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

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

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

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

Файл конфигурации RsReportServer.config
Журнал трассировки службы сервера отчетов

Есть еще вопросы? Посетите форум служб Reporting Services.