【问题标题】:Solutions for database access logging SQL Server 2008/ASP.NET 3.5数据库访问记录的解决方案 SQL Server 2008/ASP.NET 3.5
【发布时间】:2011-07-13 06:49:04
【问题描述】:

我有一个带有 SQL Server 2008 后端的 ASP.NET 3.5 Web 应用程序。

记录所有数据库访问的新要求如下:

对于选择:

  1. 执行了什么存储过程
  2. 传递了哪些参数

对于插入:

  1. 执行了什么存储过程
  2. 传递了哪些参数
  3. 记录插入的行

对于更新:

  1. 执行了什么存储过程
  2. 传递了哪些参数
  3. 记录旧行
  4. 记录新行

对于删除:

  1. 执行了什么存储过程
  2. 传递了哪些参数
  3. 记录已删除的行

还有一个报告要求,但目前这并不重要。

在我开始编写自己的记录器之前,我想知道是否有任何解决方案可以做到这一点?

Change Data Capture 看起来很有希望,但只记录数据更改(没有选择)

p.s.:我的 Web 应用程序有一个“本地安装”选项,用户可以在其中购买源代码并托管应用程序,因此 SQL Profiler 将无法用作this question中所述的记录器

【问题讨论】:

  • 我们在 Linq 中使用调试编写器,在使用实体框架时使用类似的东西。它旨在将运行的查询输出到调试窗口,我相信它们很容易用谷歌搜索。如果您使用的是 ORM,也许您可​​以调整这些 TextWriters(它们基本上就是这样)以输出到某个地方的日志?
  • @Smudge202:我没有使用 ORM
  • 应用建立在 DotNetNuke 框架之上,我使用 DNN 的 DAL 访问数据库。
  • 我对 DNN 不熟悉,但如果要编写自己的日志记录,我会看看您是否可以使用 log4net 或其他类似的日志记录框架之一。
  • 您真的需要滚动您自己的记录器,还是可以通过使用 SQL Profiler 获得?如果这是用于持续记录,那么我猜是前者,但如果它只是临时的或临时的,探查器可能会提供服务。

标签: asp.net security sql-server-2008 logging


【解决方案1】:

您可以使用 tsql 创建跟踪来捕获上述所有内容。由于您提到不能使用 Profiler,因此只需使用系统存储的 proc sp_trace_create 来创建跟踪。用户活动可以记录在跟踪文件中。您可以指定最大值。跟踪文件的大小以及要轮换日志文件的时间间隔。您需要的其他一些系统 SP 包括:

  • SP_TRACE_CREATE
  • SP_TRACE_SETEVENT
  • SP_TRACE_SETFILTER
  • SP_TRACE_SETSTATUS

供参考:http://technet.microsoft.com/en-us/library/ms188662.aspx

教程:http://sqlserverpedia.com/wiki/Running_Traces_with_TSQL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多