SQL Server中报表服务系统和项目安全

在SQL Server 2005 Express Edition中,如果我们使用一个具有对放置报表服务数据库和它的虚拟目录的管理访问权限的特权帐户,那么这会使得我们可以暂时忽视应用于标准用户的安全约束。在这篇文章里,我们将通过描述可以用来控制对发布内容的访问以及管理特性的授权和验证功能来介绍这个有意的疏忽。

推动报表服务安全的责任由报表管理器——它提供了其配置界面(注意,和它功能全面的对手不一样,SQL Server 2005 Express Edition中的报表服务不能通过管理套件控制台来管理)——和报表服务器——它执行所配置的设置——来分担。这个的实现采用了一个基于角色的安全模型,它透明地将后台的权限同一组预先定义的、所分配用户才能执行的任务关联起来。这些任务分为两大类,分别是系统和项目级安全,第一个处理站点范围的管理,而第二个处理内容管理。它们独自运行(大部分情况下),使你可以控制对你的报表服务安装的各种组成部分的访问。为了生效,每个角色都需要指定给一个任意的Windows用户或组(本地或基于Active Directory域)帐户。

重要的是,要注意不可能改变预定义角色所关联的权限或创建新的、自定义的权限,尽管在SQL Server 2005 Standard、Enterprise和Developer版本中所集成的报表服务中具有这样的功能。这种设计的决定反映了一套独特的目标,就是这些产品中的每一个都应该提供,并且在它导致灵活性受限(这可能被看做是一个缺陷)时它仍然产生相当简化的访问控制管理机制(在大多数Express Edition所用的场合中都是足够的)。

一组系统角色可以通过使用报表管理器界面来访问(可以通过http://localhost/Reports$SQLExpressInstanceName URL访问,SQLExpressInstanceName代表目标SQL Server 2005 Express Edition实例的名称)。它的首页(以及它的站点层级中的任何一个页面)在右上角有Site Settings超链接(假设你使用一个具有查看系统配置权限的帐户登录进去),这个超链接将你转到Site Settings页面,它有Configure site-wide security超链接(在下面的Security部分中)。你一点击它,你就转到了System Role Assignments页面,它提供给你被授予系统级角色的当前Windows用户和组的列表。这最少应该包括两个System Administrator项,与BUILTINAdministrators本地组和用来安装报表服务的用户帐户相关。在激活了Edit选项之后,你会看到一个页面,你从这个页面可以改变或删除它们(后者也可以通过使用工具条中的Delete按钮来完成)。New Role Assignment按钮会将你转到一个包含Group or user name文本框和两个默认系统角色列表的界面:

System Administrator——授权查看和修改系统角色分配的能力,改变报表服务器属性(通过之前提到的Site Settings页面),包括它的安全(这也应用于内容管理)。执行报表定义和管理共享时间表,这是与SQL Server的成熟版本中的这个角色相关的,这不在我们的讨论范围内(因为这个功能在SQL Server 2005 Express Edition中不可用)。

User Administrator——根据对New System Role Assignment页面的描述,这个角色应该允许查看报表服务器属性(那里提到的共享时间表在我们的例子中是不适用的)。但是,事实证明,结果并不是按预期的那样,阻碍相应的Windows帐户访问Site Settings页面和从首页删除它的超链接。

项目级安全应用于特定的内容(最常见的方法包括在文件夹级别指派项目级权限)。权限被分配给报表服务网站内的个别项(文件夹或甚至是指定的报表,如果需要这样的粒度的话)。默认情况下,在一个父容器上设置的权限被它的孩子(文件夹和报表)继承。不幸的是,因为这个界面没有提供一个改变这个行为的方法,所以改变安全设置的结果是相当繁琐的,而且涉及手动更改单个子文件夹(不过对于具有定制权限的任何项来说转回到默认设置是很简单的,通过Security 页面中可用的Revert to Parent Security命令按钮)。不过实际上,文件夹不只使组织报表进入一个逻辑的、层次结构中,它还形成安全边界,用来限制基于任意权限的访问。从首页这个顶层容器开始到单个报表和数据源,你具有指定本地或域用户或组为下面五个预定义角色之一的能力(通过那个项目页面中的Properties标签页中的Security部分):

Browser——对于用户来说最受限的,他只能查看整个站点层级中发布的报表。它结合了查看文件夹和报表的权限。在SQL Server 2005成熟版本中,它还允许查看报表模型、资源以及管理订阅;但是,这些选项在我们的讨论范围内是不可用的(因为在SQL Server 2005 Express Edition中没有提供相应的特性)。

Report Builder——从SQL Server 2005 Express Edition角度来看,这个角色在本质上是等同于Browser的(因为缺乏对Report Builder功能的支持)。一般来说,它的权限包括相同的特权(允许查看文件夹和报表),而使用报表的能力对于我们来说是无关紧要的。

Publisher——允许查看报表和它们的定义、编辑(通过它的页面上的Properties标签页的Edit链接)和上传它们(通过目标文件夹的Content页面上的工具条中Upload File按钮)、管理文件夹和它们的内容(包括创建、移动和删除它们),以及创建(通过New Data Source工具条按钮)和修改(通过一个数据源的Properties页面的General部分)数据源。这也是一个授予通过商业智能开发套件部署新报表时所需权限的角色。

My Reports——旨在提供报表管理器站点中存放的报表的一个个性化视图(基于它们的所有权)。当这样一个视图(Home文件夹中My Reports子文件夹所展示的)也可以由指定为Browser和Report Builder的帐户访问的时候,这个角色也有利于发布和创建链接报表,以及数据源的管理(创建、重新定义或删除)和文件夹的管理。这个角色还允许由所有者修改文件夹或报表上的安全。

Content Manager——提供对目标项目内容的完全权限,允许你执行所有与它相关的管理任务,包括授权相同权限给其它用户和组的能力。注意,分配这个角色(以及之前提到的System Administrator)给指定的帐户是基于SQL Server 2005 Express Edition的报表服务安装于运行Vista操作系统的计算机上的过程中的一个标准部分。