我如何使用审计跟踪来显示哪些字段曾经被编辑过?

2024-01-26

对于我正在从事的一个项目,我被要求创建对记录所做的所有更改的审核跟踪。这是我第一次必须创建审计跟踪,因此我对此主题进行了大量研究。

该应用程序将使用 PHP/MSSQL 开发,并且流量较低。

根据我的阅读,我几乎决定拥有一个审计表并使用触发器来记录表中的更改。

应用程序中显示的两个要求如下:

  1. 能够查看对字段所做的所有更改的日志(我几乎知道如何做到这一点)

  2. 在应用程序中查看记录时,能够看到记录中曾经更改过的任何字段旁边的指示符(可能还有其他信息,例如上次更改的日期)。

第#2 项是目前让我感到悲伤的一项。如果没有对每个字段进行单独的查询(或者需要很长时间才能执行的非常长的嵌套查询),是否有人对执行此操作的最佳方法有建议? (我曾考虑为表中的每个字段添加一个额外的“ModifiedFlag”字段,如果该字段曾经被编辑过,它将充当布尔指示器,但这似乎是很大的开销。


我会尽可能将审计信息与实际域信息分开处理。

要求#1:我认为您将创建额外的审核表来记录更改。 Eric 的建议是一个很好的建议,使用 SQL 数据库中的触发器创建审计信息。这样您的应用程序就不需要了解审核逻辑。

如果您的数据库不支持触发器,那么您可能正在使用某种持久性或数据库层。这也是放置这种逻辑的好地方,因为您可以再次最小化之间的任何依赖关系normal应用程序代码和审计代码。

要求#2:至于显示指标:我不会在存储实际值的表中创建布尔字段。 (这将导致您的系统之间存在各种依赖关系normal应用程序代码和您的审计追踪 code.)

我会尝试让负责显示表单的代码也负责显示字段级别的审计数据。这会导致查询开销,但这就是显示这层额外信息的成本。也许您可以通过将元数据添加到审计信息中以方便检索,从而最大限度地减少数据库开销。

我维护的一些大型企业应用程序大致使用以下结构:

  • 与表中记录的更改相对应的更改头表。

Fields:

changeId, changeTable, changedPrimaryKey, userName, dateTime

- 与被改变的字段对应的改变字段表。

Fields:

changeId, changeField, oldValue, NewValue

样本内容:

改变标题:

'1', 'BooksTable', '1852860138', 'AdamsD', '2009-07-01 15:30'

更改项目:

'1', 'Title', 'The Hitchhiker's Guide to the Gaxaly', 'The Hitchhiker's Guide to the Galaxy'
'1', 'Author', 'Duglas Adasm', 'Douglas Adams'

这种结构既可以轻松查看审计跟踪,也可以轻松检索以显示所需的指标。一个查询(标题和项目表中的内部联接)足以检索所有信息以在单个表单中显示。 (或者当您有显示的 ID 列表时甚至是一个表格)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何使用审计跟踪来显示哪些字段曾经被编辑过? 的相关文章

  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • 如何将 HTML 转换为 Markdown?

    我有一个类似 stackoverflow 的网站 有一个文本区域 人们可以在其中写答案 我用这个 PHP 库 http parsedown org 转换降价 我的意思是我使用该函数来转换 italic to i italic i inclu
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 通过 facebook graph API 检索 facebook 用户的邮政编码

    我正在尝试使用 facebook graph API 检索用户的邮政编码 我正在使用以下代码 代码在php ini中 facebook new Facebook array appId gt APP ID secret gt APP SEC
  • 语法错误,第 288 行出现意外的“endif”(T_ENDIF)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我一直在离线处理我的 WordPress 网站的此代码错误 解析错误 语法错误 homez 541 photoher marie
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 避免连接失败时出现空指针

    我有我的域类 带有命名查询 class Atendimento implements Serializable Funcionario funcionario static mapping funcionario column FUNCOD
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐