我有一个ASP.NET Web应用程序,它使用对SSRS Web服务ReportService2005.asmx和ReportExecution2005.asmx的调用。
使用的技术是ASP.NET 3.5,Visual Studio 2008和SQL Server 2008 R2(我正在使用ReportService2005,因为我正在使用使用此代码而不是ReportService2010的代码库)
用户使用表单身份验证登录系统。然后,用户导航到报告页面。用户可以属于任意数量的报告组(每个组可以包含任意数量的报告)。报告组及其关联的报告和分配给报告组的用户由Web应用程序中的页面控制,并存储在Web应用程序数据库(而不是SSRS数据库)中的一系列表中。
目前,使用服务器的默认凭据可以访问ReportService2005.asmx和ReportExecution2005.asmx。这样安全吗?服务器上的所有报告都可以通过这个默认凭证访问。对用户可以看到的报告的唯一限制将由前端应用程序强制执行,该应用程序可能被使用例如黑客攻击。的Javascript?
我想要的是一种方法,我可以取消Web应用程序数据库中的一系列报表/用户/组表并使用SSRS架构。例如:
用户A(公司A的员工)属于财务报告组和市场营销报告组。 财务组包含财务报告1和财务报告2.营销组包含营销报告1.
上述报告将放在报表服务器上的Finance和Marketing文件夹中(使用报表管理器)。
然后,我可以在报表服务器上创建一个Windows用户(让我们称之为MarketingFinance),并为该用户提供Marketing和Finance文件夹的相应权限。然后,用户A必须在他/她的.net membershipprovider配置文件中包含某种标记,以链接到MarketingFinance用户。
问题在于,我设想每次创建/修改自定义报告组时都必须在报表服务器上创建新的Windows用户。使用上面的示例说明创建了销售报告组,并向其添加了用户B.现在,必须在报表服务器上有一个Windows用户(销售),并设置相应的权限以访问Sales文件夹。此外,Web应用程序的多个客户端都希望自己的Sales / Marketing等组版本可能会将Windows用户数量增加到数千个!
我是SSRS的新手,所以可能会以错误的方式看待这个问题 - 我可以使用角色来简化这个问题吗?
此外,各公司的报告可能大致相同(公司指的是应用程序的客户),但每家公司可能希望将报告设置在不同的文件夹中。即公司A财务文件夹中包含报告A,报告B和报告C,但公司B财务文件夹中只包含报告A.据推测,报告链接会阻止我在两个文件夹中都有2个报告A的物理副本?
答案 0 :(得分:0)
你有一些不同的问题集于一身,但我会尝试解决一个基本问题:“使用多个不同的帐户设置SSRS访问会增加我的安全性吗?”
......这安全吗?
安全不是一个二元的东西:问题应该改为“这足够安全吗?”答案取决于您持有的数据,应用程序的暴露程度和其他考虑因素。 (内部公司应用程序的销售数据应该得到与大公司发布到互联网上的R& D调查结果不同的答案。)
用户可以看到的报告的唯一限制将由前端应用程序强制执行,该应用程序可能被使用例如黑客攻击。的Javascript?
似乎将Reporting Services用户分解为不同的帐户并不能解决这个问题。如果有人当前可以访问其他用户的页面,那么更改SSRS凭据会发生什么变化?如果您依靠客户端Javascript来提供他们需要访问的SSRS报告,那么您应该在服务器端检查这一点,以确保他们没有请求不正确的东西。
我会专注于确保无法从互联网直接访问SSRS服务器,然后我会努力保护您的应用程序。如果您有理由相信某人通过改变您的Javascript而易受攻击,那么请解决该问题。
除非您的前端应用程序本身具有非常独立的孤岛,否则将用户对SSRS的访问权限放入这样的孤岛对我来说没有多大意义作为安全预防措施。它可以使事情易于管理并避免错误,但我没有看到太多额外的安全性。
(此外,您提出的解决方案会在某处添加更多密码,而这些密码通常需要额外的保护,因此您可能会设置更大的问题。)
这是一个极客的观点;你的里程可能不一样;我的两分钱......