我想知道如何捕获在Asp.net reportviwer中呈现的SSRS报告的数据审计跟踪。
我不想要执行日志。我的报告示例将部门作为输入,并提供在该部门工作的员工的所有详细信息。
现在我的要求是,让我说我为部门a运行报告并获得一些员工然后我必须记录审计线索,说我已经看到了某某员工的记录。
我想从SSRS本身我可以插入已检索或要呈现的记录但是如果呈现失败,我的日志仍会说我甚至在它出现在ASP.Net页面之前就已经看过该记录了。第二种方式是我必须在使用相同参数呈现数据后再进行一次调用,然后记录结果,这可能会给我错误的结果,因为数据可能在这个小间隔内发生了变化。
其次有一种方法可以跟踪保存和打印事件在asp.net reportviewer control
上期待创意。提前谢谢。
答案 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页上的访问权限。
因此,您最好不要创建自定义屏幕而不是使用报告。