在 Internet Information Services (IIS) 8.0 上配置 Analysis Services 的 HTTP 访问权限

本文介绍如何设置用于访问 Analysis Services 实例的 HTTP 终结点。 可以通过配置 MSMDPUMP.dll(这是一个在 Internet Information Services (IIS) 中运行的 ISAPI 扩展,负责与客户端应用程序和 Analysis Services 服务器之间的双向数据传输)来启用 HTTP 访问。 当 BI 解决方案调用以下功能时,此方法提供了连接到 Analysis Services 的替代方法:

  • 客户端访问通过 Internet 或 extranet 连接,并对允许启用的端口进行限制。

  • 客户端连接来自同一网络中不受信任的域。

  • 客户端应用程序在允许 HTTP 但不允许 TCP/IP 连接的网络环境中运行。

  • 客户端应用程序不能使用 Analysis Services 客户端库(例如,在 UNIX 服务器上运行的 Java 应用程序)。 如果无法使用 Analysis Services 客户端库进行数据访问,则可以通过与 Analysis Services 实例的直接 HTTP 连接使用 SOAP 和 XML/A。

  • 除了 Windows 集成安全性之外,还需要身份验证方法。 具体而言,在配置 Analysis Services 进行 HTTP 访问时,可以使用匿名连接和基本身份验证。 不支持摘要式身份验证、窗体身份验证和 ASP.NET 身份验证。 基本身份验证的要求是启用 HTTP 访问的主要原因之一。 若要了解详细信息,请参阅 Microsoft BI 身份验证和标识委派

可以为任何受支持的 Analysis Services 版本(运行表格模式或多维模式)配置 HTTP 访问。 本地多维数据集是一个例外。 通过 HTTP 端点无法连接到本地多维数据集。

设置 HTTP 访问是安装后的任务。 必须先安装 Analysis Services,然后才能将其配置为 HTTP 访问。 作为 Analysis Services 管理员,在可能访问 HTTP 之前,需要向 Windows 帐户授予权限。 此外,最好先验证您的安装,确保它在进一步配置服务器之前完全正常运行。 配置 HTTP 访问后,可以通过 TCP/IP 使用 HTTP 终结点和服务器的常规网络名称。 设置 HTTP 访问不会使其他数据访问方法失效。

在进行 MSMDPUMP 配置时,请记住有两个连接需要考虑:客户端到 IIS 和 IIS 到 SSAS。 本文中的说明是关于 IIS 到 SSAS 的说明。 客户端应用程序可能需要其他配置,然后才能连接到 IIS。 本文未确定是使用 SSL 还是如何配置绑定。 有关 IIS 的详细信息 ,请参阅 Web 服务器(IIS )。

本主题包含下列部分:

概述

MSMDPUMP 是一个 ISAPI 扩展,它加载到 IIS 中,并提供到本地或远程 Analysis Services 实例的重定向。 通过配置此 ISAPI 扩展,可以创建 Analysis Services 实例的 HTTP 终结点。

必须为每个 HTTP 终结点创建并配置一个虚拟目录。 对于要连接到的每个 Analysis Services 实例,每个终结点都需要其自己的 MSMDPUMP 文件集。 此文件集中的配置文件指定用于每个 HTTP 终结点的 Analysis Services 实例的名称。

在 IIS 上,MSMDPUMP 使用 Analysis Services OLE DB 提供程序通过 TCP/IP 连接到 Analysis Services。 尽管客户端请求可能源自域信任之外,但 Analysis Services 和 IIS 必须位于同一域或受信任的域中,才能使本机连接成功。

当 MSMDPUMP 连接到 Analysis Services 时,它会在 Windows 用户标识下执行此作。 如果为匿名连接或 Windows 用户帐户配置了虚拟目录,则此帐户将是匿名帐户。 该帐户必须在 Analysis Services 服务器和数据库上具有适当的数据访问权限。

显示组件之间连接的关系图

下表列出了为不同方案启用 HTTP 访问时的其他注意事项。

情景 配置
同一台计算机上的 IIS 和 Analysis Services 这是最简单的配置,因为它允许你使用默认配置(其中服务器名称为 localhost)、本地 Analysis Services OLE DB 提供程序和 Windows 与 NTLM 集成的安全性。 假设客户端也位于同一域中,则身份验证对用户是透明的,你无需执行其他作。
运行在不同计算机上的 IIS 和 Analysis Services 对于此拓扑,必须在 Web 服务器上安装 Analysis Services OLE DB 提供程序。 还必须编辑 msmdpump.ini 文件以指定远程计算机上的 Analysis Services 实例的位置。

此拓扑添加了一个双跃点身份验证步骤,其中凭据必须从客户端流向 Web 服务器,然后流向后端 Analysis Services 服务器。 如果使用 Windows 凭据和 NTLM,将收到错误,因为 NTLM 不允许将客户端凭据委派到第二台服务器。 最常见的解决方案是将基本身份验证与安全套接字层(SSL)配合使用,但这将要求用户在访问 MSMDPUMP 虚拟目录时提供用户名和密码。 更直接的方法可能是启用 Kerberos 并配置 Analysis Services 约束委派,以便用户可以以透明方式访问 Analysis Services。 有关详细信息,请参阅 为 Kerberos 约束委派配置分析服务

请考虑在 Windows 防火墙中取消阻止哪些端口。 需要打开两台服务器上的端口,以允许访问 IIS 上的 Web 应用程序和远程服务器上的分析服务。
客户端连接来自非受信任的域或 Extranet 连接 来自非受信任域的客户端连接会进一步限制身份验证。 默认情况下,Analysis Services 使用 Windows 集成身份验证,这要求用户与服务器位于同一域中。 如果具有从域外部连接到 IIS 的 Extranet 用户,则如果服务器配置为使用默认设置,则这些用户将收到连接错误。

可以采取的解决方法包括建议 Extranet 用户使用域凭据通过 VPN 进行连接。 但是,更好的方法是在 IIS 网站上启用基本身份验证和 SSL。

先决条件

本文中的说明假定已配置 IIS,并已安装 Analysis Services。 Windows Server 2012 附带 IIS 8.x 作为可在系统上启用的服务器角色。

IIS 8.0 中的额外配置

IIS 8.0 的默认配置缺少对 Analysis Services 进行 HTTP 访问所必需的组件。 这些组件位于 Web 服务器(IIS)角色的安全应用程序开发功能区域中,包括以下内容:

  • 安全 | Windows 身份验证基本身份验证,以及数据访问方案所需的任何其他安全功能。

  • 应用程序开发 | CGI

  • 应用程序开发 | ISAPI 扩展

若要验证或添加这些组件,请使用 服务器管理器 | 管理 | 添加角色和功能。 按照向导逐步操作,直到到达 服务器角色。 向下滚动以查找 Web 服务器(IIS)。

  1. 打开 Web 服务器 | 安全性 并选择身份验证方法。

  2. 打开 Web 服务器 | 应用程序开发 并选择 CGIISAPI 扩展

    为 Web 服务器角色添加功能页

当 IIS 位于远程服务器上时

IIS 与 Analysis Services 之间的远程连接要求在运行 IIS 的 Windows 服务器上安装 Analysis Services OLE DB 提供程序(MSOLAP)。

  1. 转到 SQL Server 2014 功能包的下载页

  2. 单击红色的“下载”按钮。

  3. 向下滚动以查找 ENU\x64\SQL_AS_OLEDB.msi

  4. 按照向导中的说明完成安装。

注释

请记住取消阻止 Windows 防火墙中的端口,以允许客户端连接到远程 Analysis Services 服务器。 有关详细信息,请参阅 配置 Windows 防火墙以允许 Analysis Services 访问

步骤 1:将 MSMDPUMP 文件复制到 Web 服务器上的文件夹

你创建的每个 HTTP 终结点必须有自己的 MSMDPUMP 文件集。 在此步骤中,将 MSMDPUMP 可执行文件、配置文件和资源文件夹从 Analysis Services 程序文件夹复制到将在运行 IIS 的计算机的文件系统上创建的新虚拟目录文件夹。

必须为 NTFS 文件系统设置驱动器的格式。 所创建文件夹的路径不得包含任何空格。

  1. 复制在<drive>:\Program Files\Microsoft SQL Server\<instance>\OLAP\bin\isapi:处找到的以下文件:MSMDPUMP.DLL、MSMDPUMP.INI 和 Resources 文件夹。

    文件资源管理器显示要复制的文件

  2. 在 Web 服务器上,创建新文件夹: <drive>:\inetpub\wwwroot\OLAP

  3. 将之前复制的文件粘贴到此新文件夹中。

  4. 验证 Web 服务器上的 \inetpub\wwwroot\OLAP 文件夹是否包含以下项:MSMDPUMP.DLL MSMDPUMP。INI 和 Resources 文件夹。 你的文件夹应如下所示:

    • <驱动器>:\inetpub\wwwroot\OLAP\MSMDPUMP.dll

    • <驱动器>:\inetpub\wwwroot\OLAP\MSMDPUMP.ini

    • <drive>:\inetpub\wwwroot\OLAP\Resources

步骤 2:在 IIS 中创建应用程序池和虚拟目录

接下来,创建应用程序池和泵的端点。

创建应用程序池

  1. 启动 IIS 管理器。

  2. 打开服务器文件夹,右键单击 “应用程序池 ”,然后单击“ 添加应用程序池”。 使用 .NET Framework 创建名为 OLAP 的应用程序池,并将托管管道模式设置为 “经典”。

    “添加应用程序池”对话框

  3. 默认情况下,IIS 使用 ApplicationPoolIdentity 创建应用程序池作为安全标识,这是对 Analysis Services 的 HTTP 访问的有效选择。 如果更改标识有特定原因,请右键单击 OLAP,然后选择“高级设置”。 选择 ApplicationPoolIdentity。 单击此属性的 “更改 ”按钮,将内置帐户替换为要使用的自定义帐户。

    “高级设置”属性页

  4. 默认情况下,在 64 位作系统上,IIS 将 “启用 32 位应用程序” 属性设置为 false。 如果从 Analysis Services 的 64 位安装复制了 msmdpump.dll,则这是 64 位 IIS 服务器上的 MSMDPUMP 扩展的正确设置。 如果从 32 位安装中复制了 MSMDPUMP 二进制文件,请将其设置为 true。 现在,在 “高级设置” 中检查此属性,以确保正确设置此属性。

创建应用程序

  1. 在 IIS 管理器中,打开 “站点”,打开 默认网站。 应会看到名为 Olap 的文件夹。 这是对在 \inetpub\wwwroot 下创建的 OLAP 文件夹的引用。

    默认网站下的 OLAP 文件夹

  2. 右键单击文件夹,然后选择 “转换为应用程序”。

  3. 在“添加应用程序”中,输入别名的 OLAP 。 单击 “选择” 以选择 OLAP 应用程序池。 物理路径应设置为 C:\inetpub\wwwroot\OLAP

    “添加应用程序”对话框

  4. 单击 “确定” 。 刷新网站并注意到 OLAP 文件夹现在是默认网站下的应用程序。 MSMDPUMP 文件的虚拟路径现已建立。

    应用转换后的 OLAP 文件夹

注释

这些说明的早期版本包括创建虚拟目录的步骤。 不再需要此步骤。

步骤 3:配置 IIS 身份验证并添加扩展

在此步骤中,将进一步配置刚刚创建的 SSAS 虚拟目录。 你将指定身份验证方法,然后添加脚本映射。 通过 HTTP 对 Analysis Services 支持的身份验证方法包括:

  • Windows 身份验证(Kerberos 或 NTLM)

  • 基本身份验证

  • 匿名身份验证

Windows 身份验证 被认为是最安全的,并利用现有基础结构建立使用 Active Directory 的网络。 若要有效地使用 Windows 身份验证,所有浏览器、客户端应用程序和服务器应用程序都必须支持它。 这是最安全和建议的模式,但它要求 IIS 能够访问能够对请求连接的用户的标识进行身份验证的 Windows 域控制器。

对于将 Analysis Services 和 IIS 部署在不同计算机上的拓扑,需要解决用户标识在远程计算机上被委托给第二个服务时出现的双跳问题,通常通过启用 Kerberos 约束委派来支持 Analysis Services。 有关详细信息,请参阅 配置 Analysis Services for Kerberos 约束委派

当你拥有 Windows 标识时,会使用基本身份验证,但用户连接来自非受信任的域,禁止使用委派或模拟连接。 基本身份验证允许你在连接字符串上指定用户标识和密码。 而不是使用当前用户的安全上下文,而是使用连接字符串中的凭据来连接到 Analysis Services。 由于 Analysis Services 仅支持 Windows 身份验证,因此传递给它的任何凭据必须是作为 Analysis Services 托管域成员的 Windows 用户或组。

匿名身份验证 通常在初始测试期间使用,因为它易于配置,有助于快速验证与 Analysis Services 的 HTTP 连接。 只需执行几个步骤,即可将唯一用户帐户分配为标识,在 Analysis Services 中授予该帐户权限,使用该帐户验证客户端应用程序中的数据访问,然后在测试完成后禁用匿名身份验证。

如果用户没有 Windows 用户帐户,还可以在生产环境中使用匿名身份验证,但遵循最佳做法,锁定主机系统上的权限,如本文中所述:启用匿名身份验证(IIS 7)。 请确保在虚拟目录中(而不是父网站)上设置身份验证,以进一步降低帐户访问级别。

启用匿名模式后,任何用户连接到 HTTP 终端都可以作为匿名用户进行连接。 你将无法审核单个用户连接,也不能使用用户标识从模型中选择数据。 正如你所看到的,使用 Anonymous 会影响从模型设计到数据刷新和访问的所有内容。 但是,如果用户没有 Windows 用户登录名,则使用匿名帐户可能是你唯一的选项。

设置身份验证类型并添加脚本映射

  1. 在 IIS 管理器中,打开 “站点”,打开 默认网站,然后选择 OLAP 虚拟目录。

  2. 双击主页的 IIS 部分中的 “身份验证 ”。

    IIS 管理器主页的屏幕截图

  3. 如果使用 Windows 集成安全性,请启用 Windows 身份验证

    Vdir 身份验证设置的屏幕截图

  4. 或者,如果客户端和服务器应用程序位于不同的域中,则启用 基本身份验证 。 此模式要求用户输入用户名和密码。 用户名和密码通过 HTTP 连接传输到 IIS。 IIS 将尝试在连接到 MSMDPUMP 时使用提供的凭据模拟用户,但凭据不会委托给 Analysis Services。 相反,你需要在连接上传递有效的用户名和密码,如本文档的步骤 6 中所述。

    重要

    请注意,任何构建密码传输系统的人必须通过某种方式保护通信通道。 IIS 提供了一组有助于保护通道的工具。 有关详细信息,请参阅 如何在 IIS 7 上设置 SSL

  5. 如果使用 Windows 或基本身份验证,请禁用 匿名身份验证 。 启用匿名身份验证后,即使启用了其他身份验证方法,IIS 也会始终先使用它。

    在匿名身份验证下,泵(msmdpump.dll)以您为匿名用户创建的用户帐户运行。 连接到 IIS 的用户与连接到 Analysis Services 的用户之间没有区别。 默认情况下,IIS 使用 IUSR 帐户,但你可以将其更改为具有网络权限的域用户帐户。 如果 IIS 和 Analysis Services 位于不同的计算机上,则需要此功能。

    有关如何为匿名身份验证配置凭据的说明,请参阅 匿名身份验证

    重要

    匿名身份验证很可能在极其受控的环境中找到,用户可通过文件系统中的访问控制列表获得或拒绝访问。 有关最佳做法,请参阅“启用匿名身份验证”(IIS 7)。

  6. 单击 OLAP 虚拟目录打开主页。 双击 “处理程序映射”

    功能页中的处理程序映射图标

  7. 右键单击页面上的任意位置,然后选择 “添加脚本映射”。 在“添加脚本映射”对话框中,指定 *.dll 作为请求路径,指定 c:\inetpub\wwwroot\OLAP\msmdpump.dll 作为可执行文件,并将 OLAP 类型指定为名称。 保留与此脚本映射关联的所有默认限制。

    “添加脚本映射”对话框的屏幕截图

  8. 当系统提示允许 ISAPI 扩展时,单击“ ”。

    添加 ISAPI 扩展的确认屏幕截图

步骤 4:编辑 MSMDPUMP.INI 文件以设置目标服务器

MSMDPUMP。INI 文件指定MSMDPUMP.DLL连接到的 Analysis Services 实例。 此实例可以是本地或远程实例,可安装为默认值或命名实例。

打开位于文件夹 C:\inetpub\wwwroot\OLAP 中的 msmdpump.ini 文件,并查看此文件的内容。 该内容应如下所示:

<ConfigurationSettings>  
<ServerName>localhost</ServerName>  
<SessionTimeout>3600</SessionTimeout>  
<ConnectionPoolSize>100</ConnectionPoolSize>  
</ConfigurationSettings>  
  

如果要为其配置 HTTP 访问的 Analysis Services 实例位于本地计算机上,并安装为默认实例,则没有理由更改此设置。 否则,必须指定服务器名称(例如 <ServerName>ADWRKS-SRV01</ServerName>)。 对于作为命名实例安装的服务器,请务必追加实例名称(例如 ServerName>ADWRKS-SRV01\Tabular</ServerName>)。 <

默认情况下,Analysis Services 侦听 TCP/IP 端口 2383。 如果将 Analysis Services 安装为默认实例,则无需在 ServerName> 中<指定任何端口,因为 Analysis Services 知道如何自动侦听端口 2383。 但是,你确实需要在 Windows 防火墙中允许到该端口的入站连接。 有关详细信息,请参阅 配置 Windows 防火墙以允许 Analysis Services 访问

如果将 Analysis Services 的命名实例或默认实例配置为侦听固定端口,则必须将端口号添加到服务器名称(例如 <ServerName>AW-SRV01:5555/<ServerName>),并且必须允许 Windows 防火墙中的入站连接到该端口。

步骤 5:授予数据访问权限

如前所述,需要授予对 Analysis Services 实例的权限。 每个数据库对象将具有提供给定级别权限(读取或读取/写入)的角色,每个角色将具有由 Windows 用户标识组成的成员。

若要设置权限,可以使用 SQL Server Management Studio。 在 “数据库 | 角色 ”文件夹下,可以创建角色、指定数据库权限、将成员身份分配给 Windows 用户或组帐户,然后授予对特定对象的读取或写入权限。 通常,对于数据立方体的 读取 权限足以用于仅使用而不更新模型数据的客户端连接。

角色分配因配置身份验证的方式而异。

匿名 在会员列表中添加在 IIS 中编辑匿名身份验证凭据中指定的帐户。 有关详细信息,请参阅 匿名身份验证
Windows 身份验证 将 Windows 用户或组帐户添加到成员列表中,这些帐户通过模拟或委派请求 Analysis Services 数据。

假设使用 Kerberos 约束委派,唯一需要权限的帐户是请求访问权限的 Windows 用户和组帐户。 应用程序池标识不需要任何权限。
基本身份验证 将要传递在连接字符串上的 Windows 用户或组帐户添加到成员列表中。

此外,如果要通过 EffectiveUserName 连接字符串传递凭据,则应用程序池标识必须对 Analysis Services 实例具有管理员权限。 在 SSMS 中,右键单击实例 | 性能 | 安全 | 添加。 输入应用程序池标识。 如果使用了内置默认标识,则帐户将指定为 IIS AppPool\DefaultAppPool

有关设置权限的详细信息,请参阅授权访问对象和操作(Analysis Services)。

步骤 6:测试配置

MSMDPUMP 的连接字符串语法是 MSMDPUMP.dll 文件的 URL。

如果 Web 应用程序侦听固定端口,请将端口号追加到服务器名称或 IP 地址,例如 http://my-web-srv01:8080/OLAP/msmdpump.dllhttp://123.456.789.012:8080/OLAP/msmdpump.dll

若要快速测试连接,可以使用 Microsoft Excel 或 SQL Server Management Studio 打开连接

使用 SQL Server Management Studio 测试连接

  1. 在 Management Studio 的“连接到服务器”对话框中,选择 Analysis Services 作为服务器类型。 在服务器名称中,输入 msmdpump 扩展的 HTTP 地址: http://my-web-srv01/OLAP/msmdpump.dll

    对象资源管理器显示 HTTP 连接:

    对象资源管理器显示了与 SSAS 的 http 连接

  2. 身份验证必须是 Windows 身份验证,使用 Management Studio 的人员必须是 Analysis Services 管理员。 管理员可以授予其他用户更多权限,以便他们能够访问。

使用 Excel 测试连接

  1. 在 Excel 的“数据”选项卡上,在“获取外部数据”中,单击“ 从其他源”,然后选择“ 从 Analysis Services ”启动数据连接向导。

  2. 在服务器名称中,输入 msmdpump 扩展的 HTTP 地址: http://my-web-srv01/OLAP/msmdpump.dll

  3. 对于登录凭据,如果使用的是 Windows 集成安全性或 NTLM 或匿名用户,请选择 “使用 Windows 身份验证 ”。

    对于基本身份验证,请选择 “使用以下用户名和密码”,然后指定用于登录的凭据。 提供的凭据将在连接字符串中传递给 Analysis Services。

使用 AMO 测试连接

可以使用 AMO 以编程方式测试 HTTP 访问,用服务器名称替换终结点的 URL。 有关详细信息,请参阅论坛帖子(如何跨域/林和防火墙边界通过 HTTPS 同步 SSAS 2008 R2 数据库)。

说明使用基本身份验证进行 HTTP(S) 访问的语法的示例连接字符串:

Data Source=https://<servername>/olap/msmdpump.dll; Initial Catalog=AdventureWorksDW2012; Integrated Security=Basic; User ID=XXXX; Password=XXXXX;

有关以编程方式设置连接的详细信息,请参阅 ADOMD.NET 中的“建立安全连接”。

作为最后一步,请务必使用在连接源自的网络环境中的客户端计算机进行更严格的测试。

另请参阅

论坛帖子(使用 msmdpump 和基本身份验证进行 http 访问)
配置 Windows 防火墙以允许 Analysis Services 访问
授权访问对象和操作(Analysis Services)
IIS 身份验证方法
如何在 IIS 7 上设置 SSL