Введение в SQL Server Analysis Services для разработчика. Доступ по HTTP

Содержание предыдущей серии

Аналогично реляционному механизму SQL Server (см., напр., пост " SQL Server Native Web Services" в MSDNовском блоге прошлым летом) аналитический сервер Analysis Services также может выступать веб-сервисом и поддерживает обращения по HTTP. В отличие от реляционного SQL Server, где SOAPовский стек был реализован внутри движка 2005, поддержка SOAP в Analysis Services носит более глубинный характер, т.к. основной язык общения с сервером Analysis Services – XMLA – является SOAPовским по своей сути. В отличие от реляционного SQL Server, который, будучи установлен на Windows Server 2003 и выше, умеет пользоваться драйвером HTTP.SYS и поддерживает собственными средствами создание конечных точек, по урлам которых драйвер перенаправляет поступающие HTTP-запросы, в Analysis Services поддержка HTTP носит более поверхностный характер. AS не умеет самостоятельно создавать конечные точки; ему необходим веб-сервер. Схема работы по HTTP в версиях 2005, 2008, 2008 R2 претерпела мало изменений по сравнению с версией 2000 (https://msdn.microsoft.com/en-us/library/aa902670(SQL.80).aspx). msmdpump.dll есть ISAPI-фильтр, который обеспечивает трансляцию HTTP-заголовков в TCP/IP, управляет пулом потоков при различных настройках безопасности и т.д. Первоначально msmdpump соединялся с Analysis Services по Shared Memory, что предполагало размещение сервера Analysis Services физически на той же машине, что и IIS. C версии 2000 SP3 также поддерживается протокол Named Pipes, что дает возможность разносить IIS и Analysis Services на разные компы. Конфигурирование HTTP-доступа в случае Analysis Services 2005 на Windows Server 2003 Эдвард Меломед описал здесь - https://www.microsoft.com/technet/prodtechnol/sql/2005/httpasws.mspx. Конфигурирование HTTP-доступа в случае Analysis Services 2005 на Windows ХР он описал здесь - https://www.microsoft.com/technet/prodtechnol/sql/2005/httpssas.mspx. Конфигурирование HTTP-доступа в случае Analysis Services 2008 он не описал – то ли забил, то ли не подсуетился. В принципе, это не принципиально, поскольку принципиальных отличий от 2005 в ней нет. Доброе дело подхватили энтузиасты. Конфигурирование HTTP-доступа к Analysis Services 2008 на Windows Server 2008 описывается здесь. А здесь мы для очистки совести разберем оставшийся вариант - конфигурирование HTTP-доступа к Analysis Services 2008 R2 на Windows 7.

Как уже отмечалось выше, в отличие от реляционного SQL Server 2008, который умеет пользоваться http.sys и потому в этом плане самодостаточен, Analysis Services для работы по HTTP требуется IIS. По умолчанию аяец на семерке, как и на Висте, не установлен. Чтобы его установить, пойдите в Control Panel\Programs and Features, кликните слева Turn Windows features on or off. Процесс установки IIS в картинках представлен здесь. Тыкните один раз в Internet Information Services. Супротив него появится не галочка, а квадратик, что означает, что внутри какие-то подфичи не выбраны. Помимо галочек, которые он поставил по дефолту, я еще выбрал ASP.NET, что автоматически повлекло за собой .NET Extensibility, ISAPI Extensions и ISAPI Filters. Еще я поставил галочки у Basic и Windows Authentication. Полный перечень получившихся галок можно посмотреть здесь:

рис. 1

Жмем ОК.

рис. 2

Создадим где-нибудь папку, например, C:\Demo\OLAP_HTTP. В силу соображений безопасности ее лучше создавать на NTFS. В силу ограничений IIS полный путь не должен содержать пробелов.

Скопируем туда содержимое C:\Program Files\Microsoft SQL Server\MSAS10_50.MSSQLSERVER\OLAP\bin\isapi. Если IIS находится на другой машине, чем Analysis Services, на нее нужно поставить Microsoft SQL Server 2008 R2 Analysis Services OLE DB Provider, который в отдельном виде на сегодня берется из состава Microsoft® SQL Server® 2008 R2 November Community Technology Preview Feature Pack.

Открываем Administrative Tools -> Internet Information Services (IIS) Manager и на уровне сервера заходим в пункт ISAPI and CGI Restrictions (Внимание! Этот пункт не будет доступен, если на этапе установки IIS не выбрать ISAPI Extensions – см. рис.1)

рис. 3

и разрешаем ISAPI-расширение в виде msmdpump.dll, скопированной в директорию будущего веб-приложения.

рис. 4

Добавляем новый Application Pool

рис. 5

который неважно, как будет называться, например, MSOLAP

рис. 6

Раскрываем слева папку Sites, кликаем правой кнопкой на Default Web Site и говорим Add Application

рис. 7

Создаем приложение, которое мы назовем неважно, как, например, MSOLAP, ссылающееся на ранее созданную папку, в которую мы скопировали содержимое ...\OLAP\bin\isapi (Physical path). Нажатием кнопки Select выбираем из списка пулов свежесозданный пул MSOLAP.

рис. 8

Если на IIS уже существовала виртуальная директория, ссылающаяся на ту же физическую папку, ее нужно проконвертировать в приложение:

рис. 9

Application Pool при конвертации выбирается аналогично рис.8.

Для образовавшейся аппликации даблкликаем на Handler Mappings

рис. 10

и выбираем в правой панели Edit Feature Permissions

рис. 11

Убеждаемся, что присутствуют права Read и Script. Жмем ОК.

Выбираем в правой панели Add Script Map, в Request Path вводим *.dll, в Executable - C:\Demo\OLAP_HTTP\msmdpump.dll, где C:\Demo\OLAP_HTTP – путь к директории приложения MSOLAP, и Name – произвольное имя. Допустим, снова MSOLAP.

рис. 12

Выдастся предупреждение

рис. 13

Вообще-то мне казалось, что это расширение я уже разрешил на рис.4. Ну да ладно, нажал Yes.

Вот уже 12 лет, как Analysis Services не имеет в своем составе средств стандартной аутентификации в отличие, скажем, от SQL Server. Ее там не было никогда. С момента своего появления в SQL Server 7.0 OLAP Services работали исключительно в режиме Windows-аутентификации. Все равно каждый раз на очередной Платформе кто-нибудь обязательно задаст вопрос, как настроить Analysis Services, чтобы при коннекте выдавалось окошечко, куда вводить логин и пароль. Народные чаяния понятны. Интегрированная Windows-аутентификация, когда используются credentials пользователя, предоставленные им в процессе логона в домен, удобна и надежна, однако возникают проблемы, когда сервер и юзер находятся в разных доменах. Конечно, траст, Керберос или, например, VPN никто не отменял, однако не всегда они возможны в силу разных обстоятельств. В случае доступа к AS через HTTP промежуточным звеном становится веб-сервер, на который можно возложить функции базовой аутентификации. Стоя на виртуальной директории MSOLAP, кликните в средней панели иконку Authentication.

рис. 14

Если при установке IIS вы отметили в Security галки Basic Authentication и Windows Authentication, как было показано на рис.1, картинка будет выглядеть следующим образом. Задисейблите анонимную аутентификацию и включите базовую:

рис. 15

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

Если сервер Analysis Services находится на машине, отличной от IIS, в виртуальной директории msolap (сиречь C:\Demo\OLAPHTTP в данном примере) надо открыть конфигурационный файл msmdpump.ini и подправить имя OLAP-сервера на фактическое. IIS и OLAP должны располагаться в одном или по крайней мере в трастовых доменах. Сценарий с доступом партнеров состоит в том, что аяец находится в дмз, а OLAP – во внутреннем сегменте.

рис. 16

Теперь вроде все. К OLAP-серверу можно ходить по HTTP. В моем простейшем примере не будет ни SSL, ни DMZ; IIS и OLAP расположены на одной машине. Я просто возьму другую машину, не связанную с первой никакими трастами. Только веревкой. Открою на ней Excel и подключусь из него к OLAP-серверу, но по HTTP. Проверяем предварительно, что HTTP-запросы с нее отрабатываются нормально, например, из IE открывается дефолтный сайт. Он не открывается. Очень хорошо. Проверяем, что машина, на которой мы только что сконфигурировали HTTP-доступ для OLAP пингуется с той машины, на которой открывается Excel. Значит, с коннективностью все нормально, а на файрволе AS открыт ICMP, но закрыт 80-й. Открываем на семерочной машине настройку файрвола Administrative Tools -> Windows Firewall with Advanced Security и енейблим в Inbound Rules правило World Wide Web Services (HTTP Traffic In). Все заработало:

рис. 17

На удаленной машине открываем Excel -> From Other Sources -> From Analysis Services:

рис. 18

только в строке соединения вместо имени сервера пишем http://192.168.0.29/msolap/msmdpump.dll. Здесь 192.168.0.29 - адрес машины, где установлен AS. В User Name указывается пользователь из того домена, где установлен AS, с правами доступа к соответствующей многомерной базе.

рис. 19

Натурально, соединяемся.

рис. 20

Дальше могут возникнуть ошибки, которые мы разберем, как лечить, в следующей серии. Но они к делу не относятся. Мы увидели, что наряду с TCP протокол HTTP поддерживается в Analysis Services для обслуживания XMLA-запросов.

Переход на следующую серию

Автор: Алексей Шуленин