问题标签 [audit]

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 投票
2 回答
2024 浏览

java - 使用 Hibernate 和 AOP 审计模式映射

我正在尝试审核用户执行的导致相应表更改的操作。例如,如果用户要在 2 个账户之间转账,这将产生以下事件序列:

  1. 将转账金额插入转账表
  2. 从账户 1 的余额表中的余额中减去转账金额。
  3. 将转账金额添加到账户 2 的余额表中的余额。

所有表的父审计消息将是:“用户生成的金额为 XXX 的转账”

这是通过以下模式实现的: 模式

替代文字 http://img48.imageshack.us/img48/7460/auditloggingiv6.png

问题是我如何在hibernate中表示这个?

我创建了以下内容:

在 Balance and Transfer 的映射文件中

Transfer 和 Balance 类然后实现具有方法的 IAuditable

在 AuditRecord 的映射文件中,我有:

然后在使用 AOP 和 Hibernate 拦截器的 Logging 类中,我有:

然后在服务类中,我调用以下方法,包含在事务中:

parentAuditRecord 是使用带有线程安全堆栈的 AOP 创建的,并且 AuditRecordType_id 是使用方法上的注释设置的。

我遗漏了转移表上的“通过”列。以前我调用 save(transfer) 将转账金额插入到 Transfer 表中,并将传递设置为 false。(此操作也经过审核)。

我的要求比上面的例子稍微复杂一些:P

因此,上述事件的顺序应该是:

  1. 更新传输表
  2. 插入 AuditRecord(父)
  3. 插入 AuditRecord(子)
  4. 插入 TransferAuditRecord
  5. 插入平衡表
  6. 插入 AuditRecord(子)
  7. 插入 BalanceAuditRecord
  8. 插入平衡表
  9. 插入 AuditRecord(子)
  10. 插入 BalanceAuditRecord

但是,上面定义的级联选项在更新语句中失败。Hibernate 拒绝将记录插入到多对多表中(即使 AuditRecord 映射上的 unsaved-value="any" )。我总是想将行插入到多对多表中,因此一个传输可能有许多标记先前事件的审计记录。但是,最新的事件决定了用户想要看到的消息。Hibernate 要么尝试更新多对多表和以前的 AuditRecord 条目,要么只是拒绝插入 AuditRecord 和 TransferAuditRecord,从而引发 TransientObjectException。

审核消息的检索方式如下:

消息应该是这样的:“用户名设置转移到 2008 年 10 月 11 日 12:00 传递”

编辑我决定显式映射多对多表(具有关联的接口),然后在 afterTransactionCompletion 中,调用父审计记录上的保存(将保存级联到子审计记录),然后显式保存接口在所有子映射表上。这不是真正的审计历史,而是记录用户操作的非侵入性方法。如果我以后需要更完整的审计历史,我会研究 Envers。

0 投票
2 回答
2344 浏览

database - 审计跟踪和实施 SOX/HIPAA/等,敏感数据的最佳实践

我认为自己在应用程序设计方面相对精通,但我从来不用处理敏感数据。我一直想知道审计跟踪的最佳实践是什么,以及应该如何实施它们。我现在不必这样做,但如果他们要求我为他们做一些工作,能够自信地与医疗公司交谈会很好。

假设我们有一个“学校”数据库,“老师”、“班级”、“学生”都在多对多“成绩”表中标准化。你会记录什么?“成绩表”上的每次插入/更新?只有更新(比如说,一个孩子闯入并想改变成绩,这应该发出危险信号)?这是否完全取决于一个人想要的偏执程度?有最佳实践吗?

这是应该在数据库中完成的事情吗?(每个敏感 SELECT 上的触发器会在记录每个查询的“审计”表中插入一行?)应该记录什么?是否有自动内置到 Oracle/DB2 中的功能为您做这件事?这应该是应用程序端逻辑吗?

如果有人有任何关于如何处理敏感数据的正式文档/书籍(不是国防部的“可信计算”规范,而是类似的东西:P),我将不胜感激。如果这个问题非常模糊,我很抱歉。我意识到这因应用程序而异。我只是想听听您在处理敏感数据方面的详细经验。

0 投票
3 回答
6372 浏览

sql-server - SQL Server:修改“应用程序名称”属性以进行审核

由于我们没有将应用程序的用户实现为 SQL 服务器中的用户,因此当应用程序服务器连接到数据库时,每个应用程序始终使用相同的凭据来附加到每个数据库。

这提出了一个审计问题。使用触发器,我们希望存储每个更新、插入和删除,并将每个更新、插入和删除都归因于特定用户。一种可能的解决方案是向每个表添加一个“由用户更新”列,并每次都更新它。这意味着每个表上都有一个新列,每个存储过程上都有一个新参数。这也意味着您只能进行软删除。

相反,我建议使用连接字符串的应用程序名称属性并使用触发器内的 App_Name() 属性读取它。我用一个简单的应用程序对此进行了测试,它似乎可以工作(格式可以是:App=MyApp|User=100)。

你们的问题是,这是一个坏主意吗?你们有更好的主意吗?

0 投票
5 回答
12365 浏览

c# - 在 C# 中为对象实现审计跟踪?

我正在寻找有关如何在 C# 中为我的对象实施审计跟踪的想法,对于当前项目,基本上我需要:

1.存储给定对象的旧值和新值。2.记录新对象的创建。3.删除旧对象。

是否有任何通用的方法来执行此操作,例如使用 C# 泛型,这样我就不必为基础对象的事件编写代码,例如创建、删除等(ORM 对象)。问题是,如果有一种注入审计跟踪的方法,如果有人正在使用。任何人都有任何经验或他们遵循的任何方法。以面向方面 (AOP) 方式执行此操作的任何方法。

请分享您的想法等。

0 投票
6 回答
1230 浏览

sql-server - SQL Server 2005 变更审核

SQL Server 2005 中是否有内置的方式来审计特别是删除存储过程之类的事情?有我可以查询的历史记录表吗?我们有一个神秘的sproc,现在已经消失了几次。

0 投票
1 回答
1467 浏览

svn - 如何测试我是否以正确的方式配置了基于 Subversion 路径的授权?

问题在于通过 Apache Web 服务器提供的 Subversion 存储库的安全设置。

我使用基于路径的身份验证来保护一些公司信息免受外部合作者的侵害。我需要一些东西来测试授权给了我想要的人,即我需要检查我没有在配置中犯错误。

有一个简单的测试方法:使用用户的用户名和密码模拟对资源的访问。但是这种方法需要知道用户的密码。

例如,下面的 BASH 脚本在指定路径 ($url) 上测试每个用户的授权。注意:users-files.txt 包含用户的用户名和密码,格式为“username:password”。

有一种方法可以在不知道用户密码而只知道用户名的情况下进行此检查?我是运行 HTTPD 和 Subversion 的机器的根。HTTPD 是否提供了一些审计工具?

身份验证配置如下:

0 投票
3 回答
258 浏览

asp.net - 审计代码的工具转移到生产 Web 服务器?

我的团队最近收到了外部审计的结果,我们必须更正一项。

他们希望我们改变将代码移动到生产环境的方式。我们目前对所有代码更改和移动请求等使用源代码控制和票务系统。

问题在于如何将代码推送到我们的生产网络服务器。而不是使用 Araxis Merge 或差异工具。他们希望我们使用能够对移动的文件进行全面审核的工具。审核员稍后将检查该工具的日志,以确保只有经过批准的代码才能投入生产。

有人使用这样做的工具吗?

0 投票
3 回答
3054 浏览

sql-server - Maintaining audit log for entities split across multiple tables

We have an entity split across 5 different tables. Records in 3 of those tables are mandatory. Records in the other two tables are optional (based on sub-type of entity).

One of the tables is designated the entity master. Records in the other four tables are keyed by the unique id from master.

After update/delete trigger is present on each table and a change of a record saves off history (from deleted table inside trigger) into a related history table. Each history table contains related entity fields + a timestamp.

So, live records are always in the live tables and history/changes are in history tables. Historical records can be ordered based on the timestamp column. Obviously, timestamp columns are not related across history tables.

Now, for the more difficult part.

  1. Records are initially inserted in a single transaction. Either 3 or 5 records will be written in a single transaction.
  2. Individual updates can happen to any or all of the 5 tables.
  3. All records are updated as part of a single transaction. Again, either 3 or 5 records will be updated in a single transaction.
  4. Number 2 can be repeated multiple times.
  5. Number 3 can be repeated multiple times.

The application is supposed to display a list of point in time history entries based on records written as single transactions only (points 1,3 and 5 only)

I'm currently having problems with an algorithm that will retrieve historical records based on timestamp data alone.

Adding a HISTORYMASTER table to hold the extra information about transactions seems to partially address the problem. A new record is added into HISTORYMASTER before every transaction. New HISTORYMASTER.ID is saved into each entity table during a transaction. Point in time history can be retrieved by selecting the first record for a particular HISTORYMASTER.ID (ordered by timestamp)

Is there any more optimal way to manage audit tables based on AFTER (UPDATE, DELETE) TRIGGERs for entities spanning multiple tables?

0 投票
10 回答
20369 浏览

svn - 什么报告可用于 svn?

我们正在迁移到 SVN。

不幸的是,我们定期接受审计,审计员需要以下信息:
文件更改
历史 SVN 访问历史
新文件 添加 文件
更改

是否有工具可以为我们(或其中一些)生成这些报告?

0 投票
5 回答
3219 浏览

nhibernate - 审计日志策略

我正在尝试确定在我的应用程序中审计日志记录的最佳方法。日志的主要原因是报告事件的顺序(更改)。

我有一个对象层次结构,当该层次结构的任何部分发生变化时,我需要在以后创建报告。

我认为我有三个选择:

  1. 每个表都有一个日志,因此匹配对象的层次结构,然后为报告创建一个视图。
  2. 扁平化层次结构和去规范化表格,使报告更容易 - 简单的选择语句。
  3. 拥有一个日志表并记录每个更改,这使得报告更难但更灵活地更改更改。

我目前倾向于选项1。