配置服务帐户 (Analysis Services)

配置 Windows 服务帐户和权限中介绍了产品范围的帐户配置,该主题涵盖了所有 SQL Server 服务(包括 Analysis Services)的综合性服务帐户信息。请参阅此主题,了解有效的帐户类型、通过设置分配的 Windows 特权、文件系统权限、注册表权限等信息。

本主题还提供了 Analysis Services 的补充信息,包括表格和群集安装所需的其他权限。还介绍了支持服务器操作所需的权限。例如,可以配置在服务帐户下执行处理和查询操作,在这种情况下,你将需要授予其他权限以实现该操作。

  • 分配给 Analysis Services 的 Windows 特权

  • 分配给 Analysis Services 的文件系统权限

  • 授予用于特定任务操作的其他权限

未在此处介绍的另一个配置步骤是,为 Analysis Services 实例和服务帐户注册一个服务主体名称 (SPN)。此步可以实现从客户端应用程序到双跃点方案中的后端数据源的直通身份验证。此步只适用于为 Kerberos 约束委派配置的服务。有关详细说明,请参阅针对 Kerberos 约束委托对 Analysis Services 进行配置

登录帐户建议

在故障转移群集中,Analysis Services 的所有实例都应配置为使用 Windows 域用户帐户。向所有实例分配相同帐户。有关详细信息,请参阅如何安装群集 Analysis Services

独立实例应将默认虚拟帐户 NT Service\MSSQLServerOLAPService 用于默认实例,或将 **NT Service\MSOLAP$**实例名称用于命名实例。此建议适用于所有服务器模式下的 Analysis Services 实例(假定将 Windows Server 2008 R2 及更高版本用于操作系统,将 SQL Server 2012 及更高版本用于 Analysis Services)。

向 Analysis Services 授予权限

本节说明 Analysis Services 对于本地内部操作(如启动可执行文件、读取配置文件以及从数据目录加载数据库)所需的权限。如果查找有关为外部数据访问以及与其他服务和应用程序的互操作性设置权限的指导,请进一步参阅本主题中的为特定服务器操作授予其他权限。

对于内部操作,Analysis Services 中的权限持有者不是登录帐户,而是安装程序创建的包含 Per-service SID 的本地 Windows 安全组。向安全组分配权限与以前版本的 Analysis Services 一致。此外,登录帐户可能随时间而变化,但是 Per-service SID 和本地安全组在服务器安装的生存期内保持不变。对于 Analysis Services,这使得安全组(而不是登录帐户)成为持有权限的更好选择。只要手动向服务实例授予权限(无论是文件系统权限还是 Windows 特权),请务必将权限授予给为服务器实例创建的本地安全组。

安全组的名称遵循某种模式。前缀始终是 SQLServerMSASUser$,后跟计算机名,以实例名结尾。默认实例是 MSSQLSERVER。命名实例是在设置过程中提供的名称。

可以在本地安全设置中查看此安全组:

  • 运行 compmgmt.msc |“本地用户和组”|“组”| SQLServerMSASUser$<服务器名>$MSSQLSERVER(对于默认实例)。

  • 双击安全组以查看其成员。

组的唯一成员是 Per-service SID。它右侧是登录帐户。登录帐户名是 cosmetic,要向 Per-service SID 提供上下文。如果随后更改登录帐户,然后返回此页面,则会注意到,安全组和 Per-service SID 不会更改,但是登录帐户标签会有所不同。

分配给 Analysis Services 的 Windows 特权

Analysis Services 需要获取操作系统权限,以启动服务和请求系统资源。要求会因服务器模式和实例是否已群集而不同。如果不熟悉 Windows 特权,请参阅特权特权常量 (Windows),了解详细信息。

Analysis Services 的所有实例均要求具有“作为服务登录”(SeServiceLogonRight) 特权。SQL Server 安装程序会将特权分配给你在安装期间指定的服务帐户。对于以多维和数据挖掘模式运行的服务器,这是 Analysis Services 服务帐户在独立服务器安装期间要求的唯一 Windows 特权,也是安装程序为 Analysis Services 配置的唯一特权。对于群集和表格实例,必须手动添加额外的 Windows 特权。

故障转移群集实例,无论是在表格模式还是多维模式中,都必须具有“提高计划优先级” (SeIncreaseBasePriorityPrivilege) 特权。

表格实例使用以下三种额外特权,这些特权必须在安装实例后手动授予。

“增加进程工作集”(SeIncreaseWorkingSetPrivilege)

默认情况下,该特权通过“用户”安全组提供给所有用户。如同通过删除该组的特权来锁定服务器,Analysis Services 可能无法启动,并将此故障记录为:“客户端没有所需的特权。”发生此故障时,通过将特权授予相应的 Analysis Services 安全组可恢复 Analysis Services 的该特权。

“调整进程的内存配额”(SeIncreaseQuotaSizePrivilege)

当一个过程由于受到为实例所设的内存阈值限制而没有足够资源完成其执行时,将用此特权请求更多内存。

“锁定内存页”(SeLockMemoryPrivilege)

仅在分页完全关闭时才需要此特权。默认情况下,表格服务器实例使用 Windows 分页文件,但你可以通过将 VertiPaqPagingPolicy 设置为 0 来阻止它使用 Windows 分页。

VertiPaqPagingPolicy 为 1(默认),指示表格服务器实例使用 Windows 分页文件。未锁定分配,允许 Windows 按需页出。由于使用了分页,因此无需锁定内存页。因此,对于默认配置(VertiPaqPagingPolicy = 1),无需将“锁定内存页”特权授予表格实例。

VertiPaqPagingPolicy 为 0。假定对表格实例授予了“将页锁定在内存”特权,如果关闭 Analysis Services 的分页,则锁定分配。如果具有这种设置和“锁定内存页”特权,则当系统出现内存压力时,Windows 无法页出分配给 Analysis Services 的内存。Analysis Services 依赖于“将页锁定在内存”权限作为 VertiPaqPagingPolicy = 0 后的强制执行。请注意,不建议关闭 Windows 分页。这将增加操作时出现内存不足错误的几率,如果允许分页则操作可能会成功。有关 VertiPaqPagingPolicy 的详细信息,请参阅内存属性

要在服务帐户上查看或添加 Windows 特权

  1. 运行 GPEDIT.msc | 本地计算机策略 | 计算机配置 | Windows 设置 | 安全设置 | 本地策略 | 用户权限分配。

  2. 检查现有策略是否包含“SQLServerMSASUser$”。这是一个本地安全组,位于安装有 Analysis Services 的计算机。此安全组同时享有 Windows 特权和文件夹权限。双击“作为服务登录”策略,查看系统上指定安全组的方法。安全组的全名将根据你是否已将 Analysis Services 作为命名实例安装而有所变化。添加帐户特权时,请使用此安全组,而不是实际服务帐户。

  3. 要在 GPEDIT 中添加帐户特权,右键单击“增加进程工作集”并选择“属性”。

  4. 单击**“添加用户或组”**。

  5. 输入 Analysis Services 实例的安全组。请记住,名称由安全组、计算机和实例名组成

    下面的列表显示有关名为“SQL01-WIN12”的计算机上的默认实例“MSSQLSERVER”和名为“Tabular”的命名实例的两个示例,其中的计算机名为本地域。

    • SQL01-WIN12\SQLServerMSASUser$SQL01-WIN12$MSSQLSERVER

    • SQL01-WIN12\SQLServerMSASUser$SQL01-WIN12$TABULAR

  6. 重复“调整进程的内存配额”,或者重复“锁定内存页”或“提高计划优先级”。

注意注意

以前版本的安装程序会无意中将 Analysis Services 服务帐户添加到 Performance Log Users 组。尽管此缺陷已修复,但是现有安装可能具有这个不必要的组成员身份。因为 Analysis Services 服务帐户不需要 Performance Log Users 组中的成员身份,您可以从该组中删除它。

分配给 Analysis Services 的文件系统权限

注意注意

有关与每个程序文件夹关联的权限列表,请参阅配置 Windows 服务帐户和权限

有关与 IIS 配置和 Analysis Services 有关的文件权限信息,请参阅配置对 Internet Information Services (IIS) 7.0 上 Analysis Services 的 HTTP 访问

服务器操作所需的所有文件系统权限(包括从指定的数据文件夹加载和卸载数据库所需的权限)都是在安装期间由 SQL Server 安装程序分配的。

请记住,数据文件、程序可执行文件、配置文件、日志文件和临时文件上的权限持有者是由 SQL Server 安装程序创建的一个本地安全组。

为你安装的每个实例都创建了一个安全组。安全组是以实例命名的,默认实例命名为 SQLServerMSASUser<服务器名>$MSSQLSERVER 或者命名实例命名为 SQLServerMSASUser$<服务器名>$<instancename>。安装程序设置此安全组具有执行服务器操作所需的文件权限。如果检查 \MSAS11.MSSQLSERVER\OLAP\BIN 目录上的安全权限,则会看到该安全组(而非服务帐户或其 Per-service SID)是该目录的权限持有者。

该安全组仅包含一个成员:Analysis Services 实例启动帐户的每项服务安全标识符 (SID)。安装程序将 Per-service SID 添加到本地安全组。与部署 Database Engine 相比, SQL Server 安装程序部署 Analysis Services 小而明显的不同之处在于使用了本地安全组及其 SID 成员身份。

如果你认为文件权限已损坏,请遵循以下步骤以验证该服务是否仍然部署正确:

  1. 使用“服务控制”命令行工具 (sc.exe) 获取默认服务实例的 SID。

    SC showsid MSSqlServerOlapService

    对于命名实例(其实例名称为“表格”),请使用此语法:

    SC showsid MSOlap$Tabular

  2. 使用“计算机管理器”|“本地用户和组”|“组”检查 SQLServerMSASUser$<服务器名>$<实例名> 安全组的成员身份。

    成员 SID 应与步骤 1 中的 Per-service SID 相匹配。

  3. 使用“Windows 资源管理器”|“程序文件”|“Microsoft SQL Server”|“MSASxx.MSSQLServer”|“OLAP”|“bin” 验证是否在步骤 2 中向安全组授予了文件夹安全属性。

注意注意

请勿删除或修改 SID。要恢复无意中删除的 Per-service SID,请参阅 https://support.microsoft.com/kb/2620201

Per-service SID 的详细信息

每个 Windows 账户都有一个关联 SID,但服务也可以具有 SID,所以被称为 Per-service SID。安装服务实例时会创建一个 Per-service SID,作为该服务唯一的永久固定 SID。Per-service SID 是从服务名生成的计算机级别的本地 SID。在默认实例上,用户友好名称是 NT SERVICE\MSSQLServerOLAPService。

Per-service SID 的优势是其允许任意更改可见范围更广的登录帐户,而不会影响文件权限。例如,假定您安装了两个 Analysis Services 实例:一个默认实例和一个命名实例,它们在同一 Windows 用户帐户下运行。共享登录帐户时,每个服务实例都具有唯一 Per-service SID。此 SID 不同于登录帐户的 SID。Per-service SID 用于文件权限和 Windows 特权。与此相反,用户帐户 SID 用于身份验证和授权方案,即不同的 SID 用于不同目的。

由于 SID 不可变,因此,无论更改服务帐户的次数有多频繁,你都可以无限期使用在服务安装期间创建的文件系统 ACL。作为增加的安全措施,通过 SID 指定权限的 ACL 确保程序可执行文件和数据文件夹仅被服务的单个实例访问,即使其他服务在同一帐户下运行也是如此。

授予用于特定任务操作的其他权限

Analysis Services 在用于启动 Analysis Services 的服务帐户(或登录帐户)的安全上下文中执行某些任务,而在发出任务请求的用户的安全上下文中执行另一些任务。

下表说明了支持以服务帐户方式执行任务所需的额外权限。

服务器操作

工作项

调整

对外部关系数据源的远程访问

为服务帐户创建数据库登录

处理操作可能需要从外部数据源(通常是关系数据库)检索数据,然后将数据加载到 Analysis Services 数据库。而检索外部数据的一个凭据选项就是使用服务帐户。只有在您为服务帐户创建数据库登录名并授予对源数据库的读权限时,此凭据选项才有用。有关如何在此任务中使用服务帐户选项的详细信息,请参阅设置模拟选项(SSAS - 多维)。同样,如果 ROLAP 用作存储模式,则可使用相同的模拟选项。在这种情况下,该帐户还必须对源数据拥有写权限,以便处理 ROLAP 分区(即存储聚合)。

DirectQuery

为服务帐户创建数据库登录

DirectQuery 是一种表格功能,可使用它来查询以下外部数据集:太大而无法容纳在表格模型中,或具有一些特性使得 DirectQuery 比默认的内存中存储选项更合适。DirectQuery 模式中可用的一个连接选项是使用服务帐户。同样,此选项仅在服务帐户具有数据库登录名以及对目标数据源的读权限时才可用。有关如何在此任务中使用服务帐户选项的详细信息,请参阅设置模拟选项(SSAS - 多维)。或者,可使用当前用户的凭据来检索数据。在多数情况下,此选项需要双跃点连接,因此请确保将服务帐户配置为使用 Kerberos 约束委派,以便服务帐户可将标识委托给某个下游服务器。有关详细信息,请参阅针对 Kerberos 约束委托对 Analysis Services 进行配置

对其他 SSAS 实例的远程访问

将服务帐户添加到远程服务器上定义的 Analysis Services 数据库角色

远程分区和引用其他远程 Analysis Services 实例上的链接对象这两个系统功能都要求对远程计算机或设备具有权限。当用户创建和填充远程分区或设置链接对象时,该操作在当前用户的安全上下文中运行。如果您以后自动执行这些操作,Analysis Services 将在其服务帐户的安全上下文中访问远程实例。为了访问远程 Analysis Services 实例中的链接对象,登录帐户必须拥有读取远程实例中相应对象的权限,例如,对某些维度的读权限。同样,使用远程分区要求服务帐户对远程实例具有管理权限。而针对远程 Analysis Services 实例授予此类权限需要使用能够将允许的操作与特定对象关联的角色。有关如何授权允许处理和查询操作的“完全控制”权限的信息,请参阅授予数据库权限 (Analysis Services)了解相关说明。有关远程分区的详细信息,请参阅创建和管理远程分区 (Analysis Services)

写回

将服务帐户添加到远程服务器上定义的 Analysis Services 数据库角色

在客户端应用程序中启用写回时,它作为多维模型的一种功能,允许在数据分析期间创建新数据值。如果在任何维度或多维数据集中启用写回,则 Analysis Services 服务帐户必须对源 SQL Server 关系数据库中的写回表具有写权限。如果该表不存在并且需要创建时,则 Analysis Services 服务帐户还必须在指定的 SQL Server 数据库中具有创建表的权限。

写入 SQL Server 关系数据库中的查询日志表

为服务帐户创建数据库登录并分配对查询日志表的写入权限

您可以启用查询日志记录来在数据库表中收集使用情况数据供以后分析。Analysis Services 服务帐户必须对指定的 SQL Server 数据库中的查询日志表具有写权限。如果该表不存在并且需要创建时,则 Analysis Services 登录帐户还必须在指定的 SQL Server 数据库中具有创建表的权限。有关详细信息,请参阅使用基于使用情况的优化向导提高 SQL Server Analysis Services 性能(博客)Analysis Services 中的查询日志记录(博客)

请参阅

参考

配置 Windows 服务帐户和权限

其他资源

SQL Server 服务帐户和每服务 SID(博客)

SQL Server 使用服务 SID 提供服务隔离(知识库文章)

访问令牌 (MSDN)

安全标识符 (MSDN)

访问令牌 (Wikipedia)

访问控制列表 (Wikipedia)