【问题标题】:Auditing with C# and .NET使用 C# 和 .NET 进行审计
【发布时间】:2011-10-18 05:23:44
【问题描述】:

我有一个 Web 应用程序,我想审核大多数用户在应用程序上的操作,例如登录、插入数据库、更新数据库、触发异常等。

我的一位 senios 建议使用队列以获得更快的性能,因此您只需将事件排入队列,然后自动处理它,而无需等待它被处理。

你有什么建议?我应该如何处理它们?将它们排入队列是没有问题的,但我不确定在没有主体调用方法的情况下如何处理它们。

我正在使用带有 .NET 4.0 的 C#

【问题讨论】:

  • 您真的需要审计功能还是只需要日志记录?
  • @ckeller 我需要将这些东西记录在一个文件中,并且我还需要将它们存储在数据库中。我将记录更改的内容、插入的内容、触发异常的时间等

标签: c# .net logging audit


【解决方案1】:

我一直在研究一个可能会有所帮助的库。

Audit.NET 及其扩展以审计不同的系统(WCFMVCWebApiEF)并将日志存储在不同的数据存储中(SQLMongoDBDocumentDB、 File, EventLog) 可以让您灵活配置什么要审核以及哪里要存储审核日志。

【讨论】:

  • 我喜欢这个框架,但我不会放弃它登录的地方。我正在使用 Audit.NET,并使用 AuditApi 属性修饰了我的操作。我在哪里可以找到日志? @theprat000
  • 您决定是否存储/发送日志,通过Data Providers,查看文档here。默认情况下,如果未配置数据提供程序,它将记录到执行文件夹上文件系统上的 json 文件。您可以通过Audit.Core.Configuration.Setup().UseXXXX(...) 进行配置
  • 完美运行!但是,它也会以纯字符串形式记录密码。如何将其配置为屏蔽敏感数据?
  • 一个选项是设置一个Custom Action,在事件保存之前执行,这样您就可以修改要保存的最终事件。另一种选择是创建一个custom data provider 并在那里设置掩码逻辑。
  • 事件保存审计操作的超级简化示例:Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving, e => { e.Event.GetWebApiAuditAction().ActionParameters["Password"] = "****"; });
【解决方案2】:

我只是推荐一个稳定且受支持的现成日志框架。您是否考虑过日志框架,例如 log4net?

如果你愿意,你可以编写一个自定义的 appender 来登录 MSMQ。

【讨论】:

  • 我没有考虑它,因为它不是一个选项,我基本上需要构建一个将用于此应用程序的审计框架,以及所有未来的应用程序
  • @Ryan 不要重新发明轮子。成熟的日志框架,如 NLog 或 log4net 可以用作您的任务的基础
  • @Armbrat - 谢谢我也在看 log4net,起初我以为你指的是 log4j 并且很困惑,因为那是 Java 的
  • @Ryan - 没有人,log4j 用于 java,log4net 用于 .NET。 NLog 也不错。只要选择任何你觉得舒服的。我的偏好是 log4net,但这只是因为我已经使用了这么久。
  • @Armbrat - 抱歉,我在阅读更多内容后才意识到,事实上我编辑了我的信息。感谢您的反馈。
【解决方案3】:

另一种记录器称为 TracerX。它是用 C# 编写的,快速灵活。因为源代码可用,这意味着您可以根据需要对其进行修改。它带有一个允许过滤输出的查看器。

https://github.com/MarkLTX/TracerX 以及如何使用的文章:

http://www.codeproject.com/KB/dotnet/TracerX.aspx

【讨论】:

    【解决方案4】:

    实际上有两个感兴趣的话题:

    • 异步日志记录
    • 面向方面的功能

    异步日志记录可以将繁重的处理速度提高 100 倍。使用写入器线程,每隔 100 毫秒将队列转储到日志接收器,但是必须确定性地启动和停止日志引擎,以便它可以在应用程序停止时刷新接收器。

    面向方面的编程解决了您的横切关注点 - 审计/日志调用应在所需的操作序言/尾声中调用 - 查看 PostSharp 项目。

    【讨论】:

      【解决方案5】:

      (回答有点晚了,这篇文章在谷歌上的排名很高,所以我认为可能值得看看一些选项)

      如果您希望进行实际审核。 (我的意思是记录某项操作发生了,谁做了,什么时候做的,并且该可审计日志能够用作外部审计员的证据)

      (Debug Logging vs Auditing logging)

      如果是这样,你可以考虑一些选项,例如:

      1. 使用审核日志库
      2. 采用 EventStore 数据库
      3. 使用严重失败的日志库

      1。使用审计库

      • Audit.NET 已在此处提及,下载量惊人,功能非常丰富
      • auditable - 上述替代方案(免责声明,由我撰写)

      两者都很酷,因为它们允许您自带数据存储区

      2。事件外包

      这里的设计(可能会影响您的架构以包含事件)是事件是不可变的,如果您存储它们,那么您就有了系统中发生的事情的可审计存储

      注意这看起来并不能解决上面的问题,但它确实解决了如何审计,所以我已经提到了它

      3。日志库

      你必须确认日志库如果添加审核日志失败,会抛出异常。

      如果它不这样做,那么您将丢失可审核的日志,那么您将无法与您的审核员建立信任

      附注 1 - 使用选项 1 和 3,您可能需要确保将日志写入与主数据存储相同的事务中。确保所有信息都是 ACID。 (这类似于人们发布数据库事务之外的事件时遇到的问题)

      旁注 2 - 审核日志应该能够识别谁做了什么,因此您可能/应该需要加密他们最终进入的数据存储。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        • 2019-12-18
        • 2017-05-22
        • 2016-12-11
        • 2016-12-18
        • 2019-11-17
        相关资源
        最近更新 更多