reportviewer SSRS的数据审计跟踪

时间:2013-09-19 01:15:17

标签: asp.net reporting-services ssrs-2008 reportviewer reportviewer2008

我想知道如何捕获在Asp.net reportviwer中呈现的SSRS报告的数据审计跟踪。

我不想要执行日志。我的报告示例将部门作为输入,并提供在该部门工作的员工的所有详细信息。

现在我的要求是,让我说我为部门a运行报告并获得一些员工然后我必须记录审计线索,说我已经看到了某某员工的记录。

我想从SSRS本身我可以插入已检索或要呈现的记录但是如果呈现失败,我的日志仍会说我甚至在它出现在ASP.Net页面之前就已经看过该记录了。第二种方式是我必须在使用相同参数呈现数据后再进行一次调用,然后记录结果,这可能会给我错误的结果,因为数据可能在这个小间隔内发生了变化。

其次有一种方法可以跟踪保存和打印事件在asp.net reportviewer control

期待创意。提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您想为数据访问添加行为,

Reporting Services可能不适合您。报告最适合显示数据,没有副作用。

尽管如此,您可以做的最好的事情是使用自定义代码审核渲染过程。例如,当您显示员工代码时,您会调用显示它的功能,以及由谁:

Function AuditEmployeeAccess(EmployeeCode As String) As String
    ' Connect to database, audit access (off the top of my head, could be bad)
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    con.ConnectionString = "Data Source=MyServer;Initial Catalog=AuditDb;User ID=username;Password=password"
    con.Open()
    ' Don't do this, use parameters
    cmd.CommandText = ("insert into audit (AuditEmployeeCode, AccessEmployeeCode) values ('" + Globals!UserId.Value + "', '" + EmployeeCode  + "')")
    cmd.Connection = con
    cmd.ExecuteNonQuery()
    con.Close()

    ' Return the employee code for display in the report        
    Return EmployeeCode
End Function

然后使用表达式

代替保存字段值的单元格
=Code.AuditEmployeeAccess(Fields!EmployeeCode.Value)

现在,只要员工代码呈现而不是查看时,它就会进行审核。例如,如果报告长度为5页,但查看者只查看前两页,则仍会审核第5页上的访问权限。

因此,您最好不要创建自定义屏幕而不是使用报告。