1

这是我和我的团队一直在互联网上寻求帮助的一个问题,但收效甚微。这听起来(在我们看来)是一种常见的情况,并且专注于最佳方法对许多人来说可能非常有用。

我们有一个 ASP.NET 应用程序,它使用 .NET 代码在相当精细的级别控制数据访问。也就是说,我们有一个用户表、一个角色表、安全表、工作流表,然后是很多业务数据表。最终用户可以高度配置对业务数据的访问,因为他们可以直接在应用程序中自行管理用户帐户和安全性。我们的 .NET C# 代码确定特定请求有权获得哪些数据(基于 Windows 登录)并提供服务。使用 SQL Server 登录名/角色没有相关的业务安全性。

那么,如何将 SSRS 实现到使用 .NET 代码以编程方式强制执行关系数据中定义的数据访问的系统中呢?

我们认为我们的解决方案类似于以下之一:

[SSRS 报告] > [数据源] > 控制数据访问的 .NET 代码 > [SQL Server]
...或...
[SSRS 报告] > 控制数据访问的 .NET 代码 > [数据源] > [SQL Server ]

如果这是正确的,那么我们缺少什么技术或概念来使这成为可能?

任何解决方案都应满足以下关键要求:

  1. 业务高级用户(报告创建者)应该能够使用 Report Builder 3.0 创建 SSRS 报告。他们仍然应该能够使用数据集设计视图和查询设计器处理业务数据和关系。
  2. 业务高级用户(报告创建者)不必在他们的报告或数据查询中实现数据访问。他们应该只需要担心报告设计。
  3. 访问报表的最终用户(报表使用者)将根据其特定的访问级别在报表中获得过滤数据(由 .NET 代码完成)。

肯定还有其他人在使用 .NET 代码来管理数据访问——在这种情况下,SSRS 不是一个选项吗?

谢谢!

4

2 回答 2

1

我们的 ASP.Net MVC 应用程序也有类似的情况,其中 RESTful Web 服务将 XML 或 JSON 数据传回前端应用程序。

对于报告,我们想调用这些相同的控制器来获取相同的数据。幸运的是,SSRS 具有惊人的可扩展性。我创建了一个自定义数据处理扩展,它调用我们的 ASP.Net MVC 控制器并返回数据,这些数据被反序列化为数据集以在报告中使用。

然后我的查询如下所示:

Action=SomeAction;Controller=ControllerName;DtoType=List<MyDto>

虽然不是微不足道的,但它并不像您想象的那么难,实现自定义数据处理扩展是解决您的问题的好方法。网上有很多例子可以帮助你入门。

于 2013-05-08T02:43:18.933 回答
0

SSRS 运行良好,因为它离数据库非常近。试图在数据库和它本身之间插入一个 .NET 层不会很好地工作。

您在数据库中有用户、角色和安全表,SSRS 会告诉您Windows 用户的 User!UserID。如果您愿意重新实现数据访问逻辑,您可以编写一个接受 UserID 作为参数并过滤返回数据的 T/SQL 存储过程。存储过程是报表的数据集。

让业务高级用户能够创建自己的报告会有点困难。您可以通过实现一系列存储过程来实现这一点,这些存储过程返回通用数据集以供这些高级用户在构建报表时使用。然后,这些过程充当针对基础表数据的过滤视图。当报表使用者运行生成的报表时,他们将看到根据自己的 UserID 过滤的数据。

于 2013-05-07T15:00:49.160 回答