问题标签 [auditing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1293 浏览

c# - LINQ 审计和当前用户与 Web 应用程序

背景:

我有一个 Web 应用程序,我需要对其进行数据库审计以进行插入/删除/更新(可能还有读取)。我使用 LINQ 作为我的 ORM。使用我在网上找到的一些想法,我想出了一种使用属性来装饰具有关联审计表的实体的方法。审计表本身除了当前用户的id和名称、修改类型、修改时间、操作是否成功等字段外,还需要包含与原表相同类型的相同列。审计发生在 SubmitChanges 期间——我的数据上下文是抽象的,我在具体实现中继承和覆盖 SubmitChanges。抽象数据上下文实际上是从 AbstractAuditableDataContext 派生的,它扩展了 DataContext 并添加了一个 CurrentUser 属性,其中包含当前用户 ID 和名称的占位符。默认情况下,对于没有登录用户的实例,这些是 0 和“系统”——比如在注册或登录期间,当用户表的某些字段可能被更新时。该应用程序是使用 ASP.NET MVC 用 C# 编写的。

问题:

填充派生数据上下文的当前用户属性的最佳方法是什么?我是否应该创建一个注入到 AuditUtility 中的实用程序类,以检查 CurrentUser 是否已设置,如果没有,则将其填充。为了测试我会模拟它,但在实时应用程序中它可能会使用惰性- 加载并在会话中获取/设置它。或者我应该修改数据上下文工厂(由所有控制器使用)来执行此功能。我已经在单元测试期间使用了模拟工厂,因此这不会涉及创建新类。或者是否应该在工厂之外进行派生,并在上下文创建期间注入当前用户。这将允许我“代表”审计。

我意识到这有点主观,但我很感激你可能贡献的任何想法/经验。

谢谢。

0 投票
1 回答
1557 浏览

ejb-3.0 - 使用 JBoss Seam (EJB3+JSF) 的审计日志

我需要为使用 JBoss Seam 编写的 Web 应用程序实现审计日志。EntityListeners 似乎是不错的候选者,但我不知道如何将 EntityListeners 连接到应用程序会话上下文以在审计记录中包含登录使用的主体。

我想知道是否有办法进行这种“连接”,或者是否有一种更舒适/优雅/有效的方式来为这个编程环境实现审计日志。

提前致谢。

拉法。

编辑:
非常感谢达莫的回答!我尝试注入我的身份组件,但没有成功。但是,对 Component.getInstance() 的建议调用确实提供了对 EntityListener 中用户身份的所需引用。

0 投票
1 回答
654 浏览

asp.net-mvc - 附加场景中的 linq datacontext GetModifiedMembers

我正在尝试在 asp.net MVC 应用程序中实现乐观锁定,并提供审计跟踪。

审计框架依赖于能够在 SubmitChanges 期间调用 DataContext.GetModifiedMembers,我猜这很有意义。

乐观锁定使用 ROWVERSION 时间戳,序列化为 base64 并放入视图中的隐藏字段。

我的编辑操作如下所示:

执行此操作时,DataContext.GetModifiedMembers 将始终返回 MyType 上的所有属性,而不仅仅是在数据库和提供的值之间更改的属性,这会破坏审计。具体来说,它将每个属性都从它们的新值更改为新值,所以它甚至不像我可以对列表做任何聪明的事情。

我尝试先加载对象,然后再附加它,但这会产生重复键异常。

然后我尝试使用UpdateModel,即

这适用于审计,但无法通过乐观锁定。而不是 ChangeConflictException 我得到一个 InvalidOperationException 因为 UpdateModel 正在更改 concurrentTS 字段(这显然是只读的)。

我究竟做错了什么?

0 投票
6 回答
14187 浏览

sql - SQL Server 2008 变更数据捕获,谁进行了变更?

大约一周前,我在 SOF 上问了一个关于审计 SQL 数据更改的问题。出现了关于使用触发器的常见内容,在 SQL Server 2008 中也提到了 CDC。

我今天一直在尝试它,到目前为止一切都很好,我看不到它支持的一件事是跟踪谁实际进行了更改。谁执行了声明?

我很想知道是否有人使用 CDC 进行审计,以及您如何跟踪谁进行了更改?

0 投票
2 回答
280 浏览

security - 一个业务线应用程序审计哪些安全事件?

我已经审核了授权成功、失败和注销。

我考虑过审计(记录)每个方法调用并保留曾经修改过的每一行和每一列的版本,但是这两个选项都会大大增加审计的复杂性。审计一个随机子集太随机了。

法律规范(FISMA、C&A)只是说需要审计一些东西。

还有其他我忘记的非域特定审计策略吗?

0 投票
2 回答
2446 浏览

database - How can I set a username for a Postgresql audit trigger?

I am using a trigger in PostgreSQL 8.2 to audit changes to a table:

What I want to do is have some way to provide the value of fixed-username at the time that I execute the update. Is this possible? If so, how do I accomplish it?

0 投票
4 回答
2791 浏览

nhibernate - 复杂的 NHibernate 审计

我现在正在使用该IPostUpdateEventListener界面来更新审计日志,获取旧值和新值,然后将每个更新的字段存储在“审计”表中以及所有这些内容。效果很好,但是我很难满足最后两个要求:

  1. 显示更新是针对哪个员工的。
  2. 显示更新的字段的“友好”名称。

对于#1,我的第一直觉是使用反射并查找并获取给定实体上的“员工”属性以找出它是为哪个员工服务的,但是当您在图中深入一些对象时,它很快就会分崩离析没有自动返回给定 Employee 对象的方法。

解决 #1 的想法包括要求每个对象都有一个“父”属性,这样我就可以遍历图表以查找 Employee 类型(对我来说,对于简单的持久性问题来说,这会过多地污染我们的域)到使用单独的 SQL事后遍历外键并填写员工 ID 的作业(我宁愿不维护单独的 SQL 作业,因为到目前为止一切都是基于代码的 - 而且该 SQL 作业很快就会变得非常讨厌)。

至于第二个要求,我可以得到实际更改的属性名称。对于我们 80% - 90% 的字段,我们显示的是(格式正确的)属性名称,所以我可以根据 Pascal 大小写来分隔名称。但是,由于各种原因,其余字段不匹配。我们正在使用来自 MvcContrib 的 ASP.NET MVC 和 Fluent HTML 构建器,但即使我们将设置修改为在视图模型上有一个属性覆盖字段名称应该是什么(因此在代码中而不是只是视图),没有真正的方法可以将视图模型中的这些属性与正在保存的域对象匹配。

这两个问题的最后一个实用的解决方案就是在另一个服务中的每次更新操作之后调用审计日志服务,根据需要传递字段名称和员工信息,但是,我真的不想去那里明显原因。

对于这两个问题的想法将不胜感激。几天来搜索和绞尽脑汁并没有发现任何用处——大多数人似乎只停留在简单的旧/新淡水河谷记录,或者只是记录本身的“创建/更新”时间戳。

0 投票
5 回答
26932 浏览

sql - 如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

使用 PostgreSQL 触发器,是否可以记录由于 INSERT 或 UPDATE SQL 语句而对表发生的更改并将它们记录到文件中以供以后执行。

这只是暂时使用,所以只是一些快速和肮脏的东西会做。

0 投票
3 回答
195 浏览

database-design - 在数据库中记录用户活动的最佳方式?

我正在构建一个在特定日期对用户执行检查的应用程序。我需要跟踪针对该特定用户执行这些检查的次数。

我最初的想法是在我的一个表中基本上有一个字段,我只是在执行检查时增加它。我的另一个想法是创建一个名为“AuditUser”的表,每次检查客户时都会插入一条新记录。

这真的是一个问题......最佳实践方法是什么?

如果其他人有更好的解决方案,请提出建议。

提前致谢。

0 投票
4 回答
3365 浏览

asp.net-mvc - 我应该如何跟踪 asp.net mvc (nhibernate) 中任何对象的更改?

我正在寻找一种很好的方法来跟踪对对象所做的每一个更改。

我们正在构建一个自定义框架,我们需要了解谁在何时更改了哪个对象以及可能更改了什么的历史(某种程度)。

在这种情况下有什么好的做法?

扩展保存/更新方法以写入“日志”?我应该尝试使用 log4net 还是某种日志扩展?

我担心扩展保存/更新/例程的开销。

编辑:是的,我需要至少看到一个月的变化,客户有时会抱怨数据丢失,他们“忘记”他们删除了它......

Edit2(为了更好地理解,在评论中询问了问题):历史记录应该存储在 db(ms sql)中,我不喜欢在每个类的每个操作中添加日志记录。所有类都继承自我的基类,它提供保存、加载、更新、删除等功能...感谢您的进一步回答/评论 :)