保护模型

在报表服务器上,使用报表模型作为创建和使用即席报表的数据源。可以通过报表服务器文件夹命名空间、模型项安全性以及数据库安全性这三种方式来保护报表模型。

由于报表模型的安全性是多层次的,因此对于能够在文件夹层次结构中查看模型的用户,还可能会面临其他限制,从而限制了在设计时和运行时使用此模型的方式。是否能够将模型用作报表数据源取决于以下因素:

  • 对模型设置的基于角色的安全性(也就是在报表服务器文件夹层次结构中查看模型的能力)。

  • 对使用模型作为数据源的报表设置的基于角色的安全性。如果用户无法访问该报表,则该用户可能无法查看模型提供的数据(在 Reporting Services 中,只能通过报表来查看模型中的数据;第三方应用程序可以通过其他方式来公开模型数据)。

  • 对模型中的项设置的安全性。

  • 视图、表或列级的数据库安全性。

在文件夹命名空间中保护报表模型

与存储在报表服务器上的所有项一样,您可以定义项级角色分配,以确定用户是否可以查看或管理报表模型。

  • 有权查看模型的用户可以在报表服务器文件夹层次结构中查看模型、查看“常规”属性页中数量有限的模型信息(例如,模型的创建或修改时间)以及通过单击将模型用作数据源的任何即席报表中的链接来查询模型。

  • 有权管理模型的用户可以删除、重命名和更新模型。模型管理任务通常要求具有发布新模型的能力,但这一能力实际上是通过对文件夹的角色分配来授予的,文件夹角色分配决定用户是否可以向文件夹中添加项。

对已发布的模型拥有查看权限的用户无法直接打开模型以查看其内容,也无法将模型下载到文件系统中。当运行时,与报表模型进行的所有交互都要通过使用该模型的报表来实现。

保护模型中的项

模型项安全性允许您控制对模型特定部分的访问。若要配置模型项安全性,请使用 SQL Server Management Studio。启用模型项安全性之后,可以对模型命名空间中的特定节点创建角色分配。有关详细信息,请参阅“模型项安全性”页(报表管理器)

报表模型命名空间表示为具有根节点、实体、模型角色和字段的层次结构。它还包含可以用来组织(但不是保护)模型项的文件夹和透视。在 Management Studio 中查看模型时,您可以浏览层次结构以及在不同级别指定角色分配。可以对报表模型的根节点指定角色分配以控制对整个模型的访问,也可以对模型的某些部分指定角色分配以改变对所选分支的访问权限。与报表服务器的文件夹命名空间安全性一样,模型命名空间支持为树结构中较低的项使用继承的安全性。

默认情况下,将关闭模型项安全性。在未启用模型项安全性时,对模型所呈现的数据的所有查看权限由报表服务器文件夹层次结构中模型和报表的角色分配决定。

模型项安全性对于用户是透明的。如果用户无权访问模型层次结构的某个特定分支,则在报表中不会将这部分模型呈现给该用户。它不允许浏览数据,也无法在报表中返回数据。利用模型项安全性,报表服务器可以修改发送给数据源的查询,以排除模型中用户无权访问的任何部分。

通过数据库安全性保护模型

数据库安全性在模型驱动的报表中提供了第三层安全性。如果限制访问表或列,数据库将对未经授权的所有访问返回一个拒绝访问错误。如果在模型中包括设置了数据库安全性的任何表或列,当用户访问某个映射到其无权查看的表或列的模型项时,将会返回一条数据库错误消息。尽管在某些情况下有必要在表或列级别上设置数据库安全性,但考虑其对即席报表浏览的影响也非常重要。在浏览报表时遇到数据库错误消息的用户必须回退操作步骤,以返回到模型中其有权访问的部分。

注意注意

如果依靠数据库安全性来确保只允许特定用户读取特定的表或列值,则必须将数据源配置为使用 Windows 集成安全性。

可保护的模型项

使用 Management Studio 来保护模型的以下三部分:

  • 根节点

  • 文件夹

  • 实体

  • 模型角色(其中“角色”这一术语是指实体之间的关系)

  • 字段

无法将透视作为一个整体来保护,但可以保护透视中的模型项。基于模型项的安全性来继承安全性。例如,如果模型中的某个模型项只允许管理员访问,则当该模型项出现在透视中时,将只允许管理员访问。

报表模型安全性不同于您在报表服务器文件夹层次结构和系统级别上定义的安全性。模型的根节点并非通过文件夹层次结构来禁止访问或进行保护。

隐藏模型项

作为通过角色分配限制访问的替代方法,可以使用 Hidden 属性阻止用户查看模型的某些部分。如果不希望任何用户看到某个模型项,可以在模型设计器中将该项的 Hidden 属性设置为 True。隐藏项并不会从模型计算或关系中删除该项。例如,如果隐藏了某个表达式中使用的某个字段,即使用户看不到该字段,在该表达式中仍然会使用该字段。隐藏项会对所有用户隐藏该项。如果希望根据用户或组改变可见性和访问权限,则应使用角色分配,而不要使用 Hidden 属性来保护项。

如何保护报表模型中的项

您可以从报表管理器中保护模型中的项。为了保护模型项,必须已在报表服务器上部署了报表模型。

  1. 在报表管理器中,导航到包含模型的文件夹。

  2. 将鼠标悬停在模型名称上,然后单击箭头打开菜单并选择**“安全性”**。

  3. 在“模型属性”页中,单击**“模型项安全性”**。

  4. 选中**“单独保护此模型的各模型项”**复选框。

  5. 选择根节点。需要对根节点创建角色分配。

  6. 单击**“为以下用户和组(用分号分隔)分配读取权限”**。

  7. 键入由分号“;”分隔的用户或组列表。

  8. 单击**“应用”**。

  9. 导航到下一个要保护的实体、关系、字段或文件夹。重复步骤 6 到步骤 8。