分类: 数据库开发技术
2010-05-09 14:06:18
报表服务的主要任务是提供一个展示存储在SQL Server数据库中数据的便利方法。但是,要达到这个目标不应该牺牲它的机密性,例如偶然地将信息暴露给非目标浏览者。做到这一点的一个方法是根据指定给报表参数的值来限制它的范围。另一个方法涉及指定安全上下文,在这个安全上下文中将建立一个数据库连接。这个选项可以从报表管理器界面得到(可以通过将IE浏览器指向 URL,其中Instance_Name代表目标SQL Server 2005 Express Edition实例的名称)。当报表服务首页出现时,定位你想配置的数据源,切换到Details视图,并点击它名称旁边的Edit图标。你将看到Properties标签页的内容,它包含Connect using:部分,这为你提供了选择下面选项之一的能力:
Credentials supplied by the user running the report –通过一个可定制的提示要求这个选项(默认设置为Type or enter a user name and password to access the data source)。除此之外,有一个标签名为Use as Windows credentials when connecting to the data soure的复选框,它使你可以指定想要的服务器验证方法是Windows Authentication还是SQL Server and Windows Authentication。显然如果你想使用后者的话,你应该相应地调整服务器设置(SQL Server 2005 Express Edition默认情况下使用前者)。这通常是通过SQL Server Management Studio Express完成的(Server Properties对话框的Security结点)。
Credentials stored securely in the report server –你在相同页面上在指定的文本框中直接输入这项。在这种情况下,还有一个选项为Use as Windows credentials when connecting to the data source(为了指示你是否想依赖于SQL或Windows验证)。此外,还可以Impersonate the authenticated user after a connection has been made to the data source,这激活了SETUSER函数,将存储的凭证应用于数据库级别的验证,有效地模拟了一个任意的数据库用户。在SQL Server 2005报表服务的全功能版本中,存储的凭证提供了显著的优越性,在那里它们被要求用于订阅或预定的报表所相关的动作,不过即使是Express Edition,他们也可能提供一个额外的值,来确保不管是什么登录帐户都有一致的终端用户体验。
Windows integrated security – 依赖于交互用户的凭证,激活报表生成来验证和授权对存放一个目标数据库的SQL Server 2005 Express Edition实例的访问。这是一个常规选项,因为它不要求本地服务器登录和它们相应的数据库用户的管理,但是仍然使用服务器和数据库级别的安全。此外,只要网站和相应的数据源存放在相同的机器上,那么就没有像在分布式环境中所需要解决的委托问题(通过基于Kerberos委派来实现)。
Credentials are not required –指派一个到目标数据存储的匿名连接。这个选项,在配置未注意的执行帐户时是很重要的(可应用于报表服务的全功能版本),它不在本文的讨论范围内,因为在连接到SQL Server 2005 Express Edition实例所存放的数据库时它是被忽略的。
如果你决定利用存储凭证,那么你应该知道它们是存放在报表服务器数据库(通常叫做ReportServer$Instance_Name,Instance_Name是SQL Server 2005 Express Edition实例的名称)中,使用可逆的加密来保护,利用一个对称密钥(本地系统的NetBIOS名称改变时需要这个密钥,这是重命名机器帐户或数据库移动的结果)。它的管理界面可以通过报表服务配置管理器的Encryption Keys部分访问到,使你可以执行常见的密钥管理任务(包括备份、恢复、更改和删除)。如果你决定合并它们到你的标准操作过程中去,那么你应该考虑利用RSKeyMgmt命令行工具(默认情况下是在Program Files\Microsoft SQL Server\90\Tools\Binn文件夹中)来自动化它们的执行。例如,要备份SQLEXPRESS实例的密钥到任意位置(在我们的例子中是D:\Backup)并接下来恢复它,那么你应该运行下面的内容:
RSKeyMgmt -e -i SQLEXPRESS -f D:\Backup\SQLExpressRS.snk -p 1@mT0ug#2Gu3$$
RSKeyMgmt -a -i SQLEXPRESS -f D:\Backup\SQLExpressRS.snk -p 1@mT0ug#2Gu3$$
-i 开关指明实例的名称而-p是用来分派一个密码的,这个密码用于密钥的加密和解密。你需要使用一个本地Administrators组中的成员帐户,以便执行这些动作。在恢复之后,你需要重启Internet Information Services服务,使得变更生效。如果你丢失了密钥或它的安全性变差了,那么你可以删除加密的内容(显然,这么做的结果是任何存储的凭证都将从报表服务数据库中删除,而且需要使用上面描述的方法来重新创建)。这可以通过执行下面的内容来实现(注意,相同的功能通过报表服务器配置管理器图形界面中的Encryption Keys部分中的Delete命令按钮暴露出来了):
RSKeyMgmt -d -i SQLEXPRESS
远程访问报表服务受防火墙的限制。特别是必要的配置步骤依赖于存放SQL Server 2005 Express Edition实例的操作系统版本,但是,总的来说,它们使得允许向内的通讯,目标tcp端口是80禾443(后者应用于当Secure Sockets Layer加密被激活时)。实现它的最直接方式是使用Windows Firewall Control Panel applet,虽然在较大的环境中,可能为此利用基于域的Group Policy比较明智(也可能利用netsh命令行工具生成配置)。不建议依靠预定的规则组(例如和IIS相关的World Wide Web Services (HTTP)和World Wide Web Services (HTTPS))来避免任何潜在的依赖问题(这里内置的规则修改影响对报表服务应用程序的连接)。
也有其它你在Vista和Windows Server 2008机器上建立基于SQL Server 2005 Express Edition的报表服务时需要考虑的准备(为了解决User Account Control和Internet Explorer Enhanced Security Configuration所带来的变更)。特别是,为了方便管理报表服务网站,你应该添加报表服务器()和报表管理器()的URL到信任的或本地的网络区域,这是通过Internet Properties对话框的Security标签页来完成的(通过Internet Options Control Panel applet可以访问到)。当执行管理任务时,确保以提升模式启动Internet Explorer,使用具有System Administrator或Content Manager角色的帐户的安全上下文。此外,记住,本地Administrators组不再自动分配给SysAdmin固定服务器角色。相反,一个SQL Server实例的成功安装会触发User Provisioning Tool,这使得你可以指定任意帐户被授权于这个权限。当在Windows Server 2008平台(具有IIS 7.0)上运行报表服务时,你还应该指定一个基于域的帐户来为报表管理器和报表服务器网站所利用的应用程序池提供安全上下文。这要求改变它们的配置(通过IIS管理器),修改RSReportServer.config文件以及将这个帐户添加到SQLServer2005ReportingServicesWebServiceUser$ComputerName$InstanceName本地组中。