安全地使用本机 SQL 和 MDX

更新: 2009-04-30

规划服务器提供一种语言,使您能够轻松指定计算规则。这些规则可用于执行以下操作:将数据输入模型、在模型内部或模型之间移动数据以及通过现有数据计算新值等。这些规则可由建模者角色的成员使用 规划业务建模器以两种方式运行。第一种方式是将规则作为作业的一部分运行,然后再将该作业安排或分配给业务用户。第二种方式是在数据发生更改时由系统自动执行该规则。建模者成员还可以指定在 Microsoft SQL Server 2005 或 MDX 中执行,这两种方法在功能和性能上各有优缺点。

在某些情况下,PerformancePoint 表达式语言 (PEL) 对高级用户的限制可能过于严格。这一点对于那些可能希望增强其存储过程的性能、利用我们未公开的内置 SQL Server 函数或在 PEL 功能之外执行某些操作的 SQL Server 或者 MDX 专家用户而言更是如此。PEL 提供的是 SQL Server 或 MDX 的原始功能以及方便的规则基础结构,以允许使用不同的执行方式。

为实现这一点,PEL 公开了新的规则实现(称为 NativeSql 和 NativeMdxScript)。但是,这些新实现会带来安全风险。它们可能会使只具有一个模型站点访问权限的用户能够在整个应用程序的多个模型站点中做出大幅更改。具体而言,规划服务器无法对这些规则进行任何分析,因为它们是以 SQL 或 MDX 语言编写的,规划服务器不能轻松对其进行分析。这需要将规则的新实现作为服务标识加以运行,服务标识具有对包含应用数据库的 SQL Server 计算机的数据库所有者权限。这使得恶意建模者角色成员能够更改该应用程序中任意位置的数据、删除表、修改审计线索及许多其他内容。

为降低此风险,可以做出两种选择:使用审批系统以及将所有规则均以低特权用户身份运行(在另一个文档中进行了介绍)。

示例

下面的步骤介绍如何使用审批系统创建并运行本机规则。

  1. 在 规划管理控制台中,全局管理员角色的成员必须选中“启用本机 SQL\MDX 规则”复选框。此操作会将相应的标志设置为“True”。该标志存储为应用程序对象的布尔值。在应用程序级别具有 EditMetadata 权限的用户有权对其进行修改。无需对常规规则执行此步骤。

  2. 在规划业务建模器中,建模者角色的成员必须编写原始规则并将其保存为非活动状态。每次保存任何规则编辑结果(包括对常规规则所做的编辑)时,规划服务器都会在要保存规则的模型上下文中检查 EditRules 操作类型。如果是原始规则,服务器还会检查是否已启用应用程序“启用本机 SQL\MDX 规则”标志(选中该复选框),并查看每个本机规则是否处于非活动状态。设置为非活动状态的任何规则都不能部署在数据库或 OLAP 多维数据集中,并且不能执行。

  3. 在 SQL Server 数据库中,数据库管理员必须将该规则的“IsActive”标志设置为“True”以批准该规则。此标志存储在 RuleSetsOrRules 表的 IsActivated 列中。对此表的访问根据标准 SQL 权限来控制。无需对常规规则执行此步骤。

  4. 包含规则的模型必须由建模者角色的成员来部署。即使是常规规则,此步骤也是必需的。在部署模型过程中,规划服务器始终会在所部署模型的范围内检查 GenerateApplication 操作类型。此外,对于原始规则,服务器还将检查是否已启用应用程序“启用本机 SQL\MDX 规则”标志。如果此标志设置为“InActive”,则不会部署常规规则和本机规则。

  5. 现在,建模者角色的成员能够使用任一标准执行路径来执行本机规则。如果直接在规划业务建模器中执行,将在模型的上下文中检查 ExecuteRule 操作类型。如果建模者成员创建了一个作业并将其安排或分配给一位用户,则会在该模型所在的模型站点范围内检查 ManageWorkflow 操作类型。如果该规则设置为由系统执行(必须应已在创建规则时设置),则不会检查其他操作类型。除了本文所述的应用于所有规则的标准检查之外,每次从任何代码路径执行本机规则时,还会检查是否已启用“启用本机 SQL\MDX 规则”标志。如果该标志为“False”,则执行将失败。

  6. 如果对本机规则进行了任何更改,则必须如步骤 2 所述将其保存为非活动状态。并且要对该规则重复执行步骤 3 和步骤 4 以进行重新审批。这会对每个本机规则创建一个审批过程。在某些情况下,全局管理员成员可能会决定其规划应用程序不需要本机规则。此时,他们可以选择永不启用“启用本机 SQL\MDX 规则”标志。默认情况下,此标志设置为“False”。即使该标志设置为“True”,每个规则也必须由建模者角色的成员编写并由数据库管理员审批。这使得管理员能够建立一个审阅系统,以便在启用规则之前对规则进行审阅。最后,如果全局管理员成员决定系统中不再需要原始规则,则他们可以禁用“启用本机 SQL\MDX 规则”位。执行此操作后,就不能再创建、更新、部署或执行本机规则;而只能删除本机规则。

另请参阅