Продукт рекламировался как инструмент для разработки и управления, с помощью которого конечные пользователи и администраторы баз данных смогут формировать специализированные отчеты. К сожалению, специалисты компании создали сложный набор шаблонов и запутанную парадигму разработки, вследствие чего работать с этим продуктом было труднее, нежели создавать отчеты с помощью инструментов бизнес-аналитики (BI) комплекса продуктов Visual Studio или набора ReportViewer. Report Builder 2.0 мало напоминает исходную версию, и с этим продуктом легко управляются как конечные пользователи, так и менеджеры. Однако Report Builder не является универсальным средством для всех сетей; чтобы узнать, подходит ли этот продукт для вашей организации, прочтите врезку «Готовы ли вы к использованию Report Builder 2.0?».

Архитектура

Report Builder 2.0 базируется на коде служб SQL Server 2000 Reporting Services (SSRS). Этот код, в сущности, представляет собой написанный на языке Report Definition Language (RDL) локально установленный обработчик отчетов со специализированным расширением для визуализации отчетов, в котором вызовы интерфейсов Windows API используются для прорисовки сгенерированного отчета на экране пользователя (то есть отчет не передается браузеру в виде документа HTML).

Обработчик отчетов Report Builder (см. рисунок), как и размещаемый на сервере обработчик отчетов SSRS, выполняет следующие операции после того, как конечный пользователь подключится к каталогу отчетов заданного экземпляра SSRS:

  • открывает выбранный отчет в каталоге SSRS; этот файл RDL можно также загрузить из сетевой файловой системы как файл RDL второго поколения (форматы файлов RDL первого и второго поколения рассматриваются далее);
  • интерпретирует и оценивает файл определения отчета RDL;
  • открывает каталогизированный источник данных, указанный в файле RDL, и затем открывает соединение с базой данных для аутентификации пользователя, если в источнике данных упоминаются учетные данные;
  • реагирует на незаполненные входные параметры, выводя диалоговые окна;
  • выполняет встроенные запросы и передает набор строк обработчику отчетов; объединяет данные с макетом отчета из определения отчета на RDL;
  • отображает отчет для пользователя;
  • при возникновении исключений отображает для пользователя диалоговые окна с предупреждением.

Здесь идет речь о той же последовательности событий, которую выполняет обработчик SSRS на сервере при визуализации простых отчетов. Однако в отличие от службы SSRS, которая возвращает код HTML в браузер, модуль Report Processor дизайнера отчетов Report Builder выполняет эти шаги на клиентской системе и создает отчет в окне Report Builder. Важнейшее различие между Report Builder и SSRS состоит в том, что подключение к базе данных осуществляется с помощью обработчика отчетов удаленного клиента, а не посредством обработчика отчетов SSRS на стороне сервера.

Отметим, что строка соединения, определенная в источнике данных, должна содержать те же учетные сведения для обращения к данным. То есть если источник данных осуществляет аутентификацию с помощью интерфейса Security Support Provider Interface (SSPI), на SQL Server передаются те же учетные данные, что используются в случае, если пользователь обращается к этому отчету из окна браузера Windows. Report Builder не позволяет разработчикам ссылаться на каталогизированные отчеты SSRS, включающие учетные данные того или иного пользователя, — поддерживаются только отчеты из общедоступных источников данных. Можно создавать локально хранимые отчеты, использующие предложенные пользователем фиксированные методы аутентификации или методы на базе протокола SSPI, но эти отчеты нельзя сохранять в том же каталоге SSRS — сохранение допускается только в файловой системе. Более подробные сведения о безопасности можно найти во врезке «Report Builder 2.0 и проблемы безопасности».

С учетом базовой архитектуры Report Builder 2.0 пользователи этого продукта обычно создают, сохраняют и извлекают отчеты, которые уже сохранены в заданном экземпляре SSRS. Хотя существует возможность создавать отчеты, которые ссылаются на данные, хранящиеся в различных источниках, эту процедуру нельзя назвать интуитивно понятной. Анализируя процесс использования Report Builder, я расскажу о том, как работать с источниками данных, отличными от тех, что представлены в SSRS.

Первые шаги

Report Builder 2.0 можно получить на сайте загрузки Microsoft (http://www.microsoft.com/downloads/details.aspx?FamilyID=9f783224-9871-4eea-b1d5?f3140a253db6&displaylang=en). Продукт устанавливается на сервере SSRS, что позволяет пользователям с легкостью развернуть программу из диспетчера Report Manager одним щелчком мыши. Однако следует обязательно удостовериться в том, что администратор баз данных не отключил генератор отчетов. В этом разделе я подробно опишу процесс активации (или деактивации) функций Report Builder. Начнем с настройки экземпляра SSRS для предоставления Report Builder 2.0 пользователям, имеющим доступ к соответствующим группам безопасности через Report Manager.

Запустите SQL Server Management Studio (SSMS) и установите соединение с экземпляром SSRS, как показано на экране 1 (не с сервером баз данных). После установления соединения щелкните на нем правой кнопкой мыши и в раскрывшемся меню выберите пункт Facets; на экране отобразится компонент Surface Area Configuration for Reporting Services.

Экран 1. Открытие SSMS-соединения с экземпляром SSRS

Проследите за тем, чтобы свойство WebServiceAndHTTPAccessEnabled имело значение True, как показано на экране 2; это даст вам возможность использовать Report Builder, а также Report Manager или другие взаимодействующие с SSRS приложения на базе протокола SOAP (Simple Object Access Protocol). Нажмите кнопку ОК.

Экран 2. Указание свойств для Surface Area Configuration for Reporting Services

Теперь перейдите в диалоговое окно Server Properties и выберите пункт Security. Проследите за тем, чтобы флаг Enable ad hoc report executions был установлен. Возможно, вы захотите сбросить флажок Enable Windows integrated security for report data sources, чтобы заблокировать атаки с использованием «троянских» программ.

Запустите браузер и перейдите к Report Manager. Откройте окно диспетчера SSRS Configuration Manager и вместе с администратором баз данных проверьте правильность URL-адреса для Report Manager. Обычно адрес имеет примерно такой вид: https:///Reports_/Pages/Folder.aspx.

Щелкните на Site Settings и в текстовое поле Custom Report Builder launch URL введите текст /ReportBuilder/ReportBuilder_2_0_0_0.application. Этот указатель позволит пользователям запускать Report Builder 2.0 одним щелчком мыши, если только системы, на которых они работают, наделены достаточными правами.

Назначьте отдельным пользователям (а лучше — доменным группам Windows) те или иные роли в диспетчере отчетов, как показано на экране 3. Сделать это необходимо для того, чтобы только уполномоченные пользователи могли обращаться к Report Builder и связанным с ним ролям SSRS. Хотя этот процесс выполнить довольно просто, его описание выходит за рамки данной статьи. Более подробную информацию на этот счет можно найти в главе 4 книги Hitchhiker’s Guide to SQL Server 2000 Reporting Services (авторы Peter Blackburn и William R. Vaughn, издательство Addison Wesley, 2004 год).

Экран 3. Назначение ролей в диспетчере отчетов

В окне Report Manager перейдите в каталог Home каталога отчетов SSRS. Обратите внимание: на экране отображается значок Report Builder рядом с папкой My Reports. Установите флажок My Reports; таким образом вы дадите службе SSRS указание создать выделенную папку для каждого пользователя, чтобы отдельные сотрудники имели личные каталоги для хранения отчетов. Можете установить настройки безопасности, чтобы пользователи могли сохранять отчеты только в своих папках. Это полезно сделать, ибо подобным образом вы защитите существующие производственные отчеты как от неопытных пользователей, так и от нарушителей. Кроме того, я рекомендую создать экранный ярлык Run As, который будет открывать браузер с учетными данными целевого пользователя; так вы получите представление о том, что именно увидит конечный пользователь при запуске Report Manager. Это гораздо удобнее, чем идти к пользователю и проверять все с его компьютера.

Управление отчетами

После того как вы активируете Report Builder и зададите соответствующие настройки сайтов в Report Manager, конечные пользователи смогут создавать отчеты или открывать имеющиеся отчеты из каталога SSRS. Чтобы обратиться к отчету, запустите браузер и откройте Report Manager. Затем щелкните на значке Report Builder, чтобы инициировать запускающийся одним щелчком процесс развертывания, в ходе которого либо осуществляется первичная установка Report Builder, либо выполняется проверка установки клиентской части. Отметим, что в некоторых версиях Windows и в зависимости от примененных настроек безопасности пользователь, возможно, не будет иметь достаточных прав для установки на клиентской системе приложений, таких как Report Builder. В подобных случаях клиент, открывающий браузер, должен иметь статус администратора.

По завершении установки продукта Report Builder 2.0 его можно запустить на системе пользователя через меню Start. После запуска на экране появляется окно с двумя значками. Щелчком на значке Table or Matrix запускается мастер, предоставляющий пошаговые инструкции в процессе создания нового отчета на базе одного элемента управления Tablix. Это новый механизм для языка описания отчетов второго поколения. С помощью значка Chart запускается аналогичный мастер, формирующий отчет на базе элемента управления Chart.

Чтобы обратиться к тому или иному каталогизированному отчету SSRS, необходимо сначала настроить еще одно свойство конфигурации, которое адресуется к конкретному экземпляру SSRS, содержащему каталог отчетов. Щелкните на значке Files, расположенном в левом верхнем углу окна Report Builder, и выберите пункт Options. На экране появится диалоговое окно Report Builder Options; в нем следует задать URL-адрес Report Builder, указывающий на нужный вам экземпляр. Как я уже отмечал, для поиска этого указателя URL можно задействовать утилиту SSRS Configuration Manager. Существует и другая возможность: пусть URL указывает на любой экземпляр SSRS, который показывает каталог отчетов с помощью протокола SOAP.

Редактирование каталогизированного отчета. После того как Report Builder установит соединение с целевым каталогом SSRS по протоколу SOAP, у пользователя появится возможность извлекать из каталога отчеты или общие данные. Давайте подробно проанализируем процесс извлечения отчета из каталога с последующим редактированием, тестированием и сохранением этого отчета в том же каталоге. Для выполнения данного процесса необходимо, чтобы пользователь имел достаточные полномочия для извлечения и редактирования отчетов.

В этом случае опять-таки следует в окне Report Builder щелкнуть на значке Files и выбрать пункт Open. На экране появится диалоговое окно Open Report, в котором будет отображена основная папка каталога отчетов. Обратите внимание на то, что пользователи смогут увидеть только те элементы каталога, к которым они имеют доступ. В каталоге выберите отчет для просмотра и редактирования. После того как RDL отчета извлекается из каталога SSRS, Report Builder отображает этот отчет в представлении конструирования.

В моем примере, показанном на экране 4, Report Builder заполнил коллекцию отчета Parameters, а также наборы данных, используемых этим отчетом. В рассматриваемом отчете RDL задает три набора данных — два из них используются для заполнения списков выбора параметров пользовательского интерфейса; эти списки позволяют пользователю указывать значения параметров, которые впоследствии ориентируют обращенный к набору строк основного отчета запрос на желаемое подмножество таблицы продуктов.

Экран 4. Извлечение отчета из каталога SSRS

Теперь вы можете вносить в отчет любые изменения. Когда вы будете готовы к просмотру изменений в завершенном отчете, нажмите кнопку Run. Тем самым вы запустите локальный (то есть клиентский) обработчик отчетов, который отобразит ваш отчет в окне просмотра Report Builder. Обработчик отчетов сформирует интерфейс ввода параметров, подобный тому, который отобразился бы в том случае, если бы отчет был сгенерирован средствами SSRS и отображен в окне браузера.

Создание локально размещаемого отчета. В некоторых случаях бывает целесообразно сохранять и извлекать отчеты, не прибегая к помощи каталога SSRS. Данный механизм напоминает архитектуру инструментального набора ReportViewer, но не так прост в освоении. Процесс предполагает отступление от типичного процесса создания нового отчета, предлагаемого мастером: это делается для того, чтобы помочь обработчику отчетов Report Builder найти конкретный отчет, когда он потребуется. О различиях между Report Builder и ReportViewer рассказано во врезке «Report Builder и ReportViewer».

В окне Report Builder щелкните на значке Files и выберите элемент New. На экране появится диалоговое окно Report Builder, содержащее два значка мастера (Table or Matrix и Chart). Щелкните на значке Table or Matrix, инициируя процесс создания локально хранимого отчета. Вы можете также воспользоваться мастером Chart для создания локального отчета.

На экране появится диалоговое окно New Table or Matrix, и вам будет предложено ввести источник данных (включая установление соединения с существующим экземпляром SSRS). Список источников данных заполняется из подключений к источникам данных, хранимых в системе со времени последнего запуска Report Builder. Если вам нужно увидеть отчет, размещенный на сервере, нажмите кнопку Browse и просмотрите содержимое каталога SSRS. Чтобы создать новый локально размещенный отчет, нажмите кнопку New для формирования нового источника данных.

На экране появится диалоговое окно Data Source Properties, которое используется для создания строки подключения к SQL Server (или к любому другому источнику данных). В раскрывающемся меню выберите нужный тип соединения (например, Microsoft SQL Server, OLE DB, Microsoft SQL Server Analysis Services) и нажмите кнопку Build, чтобы поставщик. NET Data Provider запустил типичное диалоговое окно подключения. Выберите интересующий источник данных и нажмите кнопку ОК, в результате чего будет создана строка подключения.

Для ввода учетных данных в строку подключения щелкните на элементе Credentials и выберите тип аутентификации, который обработчик отчетов будет использовать для установления соединения с базой данных, как показано на экране 5. При подготовке отчетов желательно использовать SQL Server; в этом случае отчеты не смогут выполнять запросы SQL, а также операции на языке обработки данных Data Manipulation Language (DML), которые они не должны выполнять. Имейте в виду, что конечные пользователи могут выбрать настройку Use current Windows user, которая может сделать систему мишенью для атак с применением «троянских» программ. Нажатием кнопки ОК примите созданную строку подключения и настройки учетных данных.

Экран 5. Указание учетных данных для подключения к?источнику данных

Когда вновь откроется окно мастера отчетов New Table or Matrix с только что созданным источником данных, выбранным для данного отчета, нажмите кнопку Next и продолжайте формирование отчета. Откроется диалоговое окно Design a query. Надо отметить, что панель представления в виде базы данных заполняется только теми объектами базы данных (таблицами, представлениями, хранимыми процедурами), к которым имеет доступ прошедший аутентификацию пользователь.

Начиная с этого момента вы можете работать с этим мастером по той же схеме, что и с мастерами конструирования отчетов Visual Studio BI или ReportViewer. Необходимо правильно выбирать столбцы для агрегирования либо для того, чтобы группировать вокруг них строки или (при работе с матричными отчетами) столбцы данных. Практические указания относительно создания отчетов можно найти в книге Hitchhiker’s Guide to SQL Server 2000 Reporting Services (авторы Peter Blackburn и William R. Vaughn, издательство Addison Wesley, 2004 год).

Таким образом, специалисты Microsoft подвергли исходную версию Report Builder столь глубокой переработке, что получили на выходе совершенно новое приложение. В сущности, Report Builder 2.0 столь мало напоминает исходное инструментальное средство, что Microsoft следовало бы переименовать его, а не переносить на новое изделие негативные ассоциации, которые, возможно, выработались у администраторов баз данных применительно к Report Builder 1.0. Хотя Report Builder представляет собой ценное и, вообще говоря, простое в использовании инструментальное средство, применять его для редактирования существующих развернутых отчетов довольно-таки сложно. Кроме того, перед тем как развертывать это приложение, администраторы баз данных и менеджеры должны проводить тщательный анализ системы безопасности.

Уильям Вон (billva@betav.com) — эксперт по Visual Studio, SQL Server, Reporting Services и интерфейсам доступа к данным

Рисунок. Архитектура Report Builder

Готовы ли вы к использованию Report Builder 2.0?

Дизайнер отчетов Report Builder 2.0 годится не для всех условий эксплуатации. Чтобы решить, будет ли приложение полезным для вашей организации, надо выяснить, смогут ли разработчики отчетов и конечные пользователи выполнять следующие операции.

  • Указывать на заданный экземпляр служб отчетов SQL Server Reporting Services (SSRS). Этот экземпляр SSRS должен быть надлежащим образом активирован и запущен, а пользователи должны знать, каким образом выполняется первоначальное подключение к корректному экземпляру.
  • Выбирать подходящий источник данных для отчета. Пользователи должны знать, что представляет собой источник данных, а также каким образом выбирать каталогизированный общий источник данных или создавать новый источник данных, указывающий на базу данных отчетов, файл или другой источник данных. Report Builder 2.0 облегчает решение этой задачи, предоставляя каталог SSRS, который может показывать общедоступные источники данных, но в случаях, когда ответственный за отчеты администратор баз данных не создал особого каталога для источников данных, к которому могли бы обращаться пользователи, толку от предоставления каталога, скорее всего, будет немного.
  • Выбирать соответствующий источник строк данных для отчета. Пользователи должны знать, как выбирать соответствующую таблицу, представление или хранимую процедуру, которую ответственный за отчеты администратор баз данных наделил достаточными правами. В некоторых случаях для того, чтобы получить данные отчета, пользователю придется создавать запрос SQL. Надо отметить, что предоставление прав даже не представляющей опасности таблице может быть проблематичным, если пользователи не знают, как строить предложение WHERE или почему умение строить такие предложения имеет большое значение.
  • Понимать, как операции по извлечению данных отражаются на производительности системы. То есть построены ли созданные пользователями отчеты на актуальных данных или на данных моментального снимка? Имеют ли пользователи доступ к производственной базе данных, где их запросы могут привести к снижению производительности?
  • Понимать, как использовать элементы отчета для создания макета отчета. Альтернативный вариант — воспользоваться мастером отчетов.
  • Сохранять/изменять новые отчеты в каталоге SSRS. Помните, что решение предоставить пользователям право вносить изменения в существующие отчеты имеет далеко идущие последствия.
  • Обращаться к данным, упоминаемым в запросах. Хотя база данных сама по себе должна быть заблокирована, пользователям необходим доступ к некоторой части данных.
  • Понимать, как обрабатывать исключения. Пользователи должны знать, как обрабатывать типичные исключения. Как и SSRS, локально сгенерированные отчеты предоставляют все исключения конечным пользователям, которые, скорее всего, меньше других готовы к разрешению подобных вопросов, хотя, возможно, сами являются виновниками проблем. Я рекомендую создать страницу с перечнем типичных ошибок, а также решений, предлагаемых ответственным за отчеты администратором базы данных.

Организациям, внедряющим Report Builder 2.0, придется вкладывать значительные средства в подготовку ответственных за отчеты администраторов баз данных, разработчиков отчетов и конечных пользователей.

Report Builder 2.0 и проблемы безопасности

Для пользователей Report Builder 2.0 решение таких задач, как создание отчетов по данным из базовых таблиц, представлений и хранимых процедур, не составляет труда и, может быть, даже дается слишком легко. Когда пользователи создают отчеты, они могут указывать исходный код SQL для извлечения данных. К сожалению, запросы, составляемые пользователями, не всегда отличаются эффективностью.

Перед тем как предоставлять самую ценную информацию вашей компании в распоряжение конечных пользователей, тщательно проанализируйте вопрос о том, каким именно пользователям действительно требуются эти данные. Дело в том, что таких мер, как блокировка доступа к базовым таблицам и предоставление ограниченных полномочий для работы с теми или иными представлениями и хранимыми процедурами, возможно, будет недостаточно. Любое приложение, допускающее аутентификацию на базе интерфейса Security Support Provider Interface (SSPI), уязвимо для атак с использованием троянских программ. Безобидные, казалось бы, запросы, встроенные в отчеты, могут содержать вредоносные инструкции SQL, которые предоставляют права определенным пользователям и группам, или, хуже того, фактически разрушают данные. Для предотвращения подобных нарушений информационной безопасности позаботьтесь о том, чтобы у вас не было никаких «суперпользователей», которые могут получать отчеты, тайно выполняющие инструкции SQL, не имеющие отношения к запросу, цель которого — возвратить в отчет определенные данные. Самыми очевидными мишенями этих атак являются администраторы баз данных.

Для обеспечения безопасности при развертывании Report Builder 2.0 следуйте приведенным ниже дополнительным рекомендациям.

  • Настройте службы отчетов SQL Server Reporting Services (SSRS) таким образом, чтобы пользователи отчетов имели доступ лишь к целевым разделам каталога отчетов. Организуйте каталог отчетов SSRS так, чтобы администраторы баз данных могли предоставлять доступ лишь к ограниченному числу деревьев иерархии каталога.
  • Настройте источники данных производственных отчетов так, чтобы исключить аутентификацию на базе интерфейсов SSPI. В строках подключения к источникам данных нужно использовать учетные записи для регистрации в системе SQL Server, предназначенные для предоставления прав доступа только к заданным хранимым процедурам базы данных и представлениям. Кроме того, следует отключить средства аутентификации с использованием интерфейса SSPI на сервере SSRS.

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

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

Познакомьтесь с ролями SSRS и с тем, как назначать их конечным пользователям и группам доменов. Сведения о ролях SSRS можно найти в главе 4 книги Hitchhiker's Guide to SQL Server 2000 Reporting Services (авторы Peter Blackburn и William R.Vaughn, издательство Addison Wesley, 2004 год).

Report Builder и ReportViewer

Между дизайнером отчетов Report Builder 2.0 и Windows Forms или размещенным в среде ASP.NET элементом управления ReportViewer имеются существенные различия. Все операции по подключению и запросы, встроенные в язык описания отчетов Report Definition Language (RDL), Report Builder осуществляет с клиента. При использовании элемента управления ReportViewer эти операции выполняет составленный пользователем код. Чтобы установить соединение и возвратить подходящую структуру данных (скажем, таблицу данных), которая будет передана локальному обработчику отчетов элемента ReportViewer, необходимо создать и выполнить код на стороне клиента. Вы также можете перевести ReportViewer в режим Server mode и просто указать на существующий каталогизированный отчет, после чего службы SSRS возвратят код HTML. Еще одно существенное отличие состоит в том, что разработчикам Report Builder 2.0 (равно как и пользователям) не приходится устанавливать ни Visual Studio, ни средства SQL Server business intelligence (BI), к тому же они могут обходиться без навыков программирования на языке Visual Basic.NET (VB. NET) или даже на C#.