我们有一个应用程序安装在许多客户端的场所。我们正在努力收集将来发送给我们的信息。我们希望确保我们能够检测到我们的任何数据是否被修改以及是否有数据被删除。防止SQL数据库中的数据欺诈和删除
为了防止数据被修改,我们目前使用散列表行并将散列与数据一起发送。但是,我们正在努力检测数据是否已被删除。例如,如果我们在表中插入10条记录并散列每行,用户将无法修改记录,但是如果他们删除了所有记录,那么我们就无法将其与初始安装区分开来。
约束:
- 客户有管理员角色DB
- 应用程序和数据库将是后面的DMZ,将无法连接外部服务
- 客户将能够配置文件的任何sql命令并能够复制我们所做的任何初始设置。 (以清除他们的客户也可以删除/重新创建表)
- 虽然客户端可以删除数据和表,但是在审计过程中如果删除或删除对我们来说显而易见,那么他们应该始终在积累数据并且丢失数据或截断数据会很突出。我们希望能够在其余表格中检测到删除和欺诈行为。
- 我们正在假设客户将无法逆转我们的代码库或散列/加密数据本身
- 客户将向我们发送每月收集的所有数据,系统将由我们每年审核一次。
- 还可以考虑他们的客户端可以将数据库的备份或虚拟机的快照恢复到“良好”状态,然后如果他们想销毁数据,则回滚到“良好”状态。我们不希望直接对vm快照或db备份进行任何检测。
到目前为止,我们唯一的解决方案是加密安装日期(可以修改)和实例名称。然后每分钟“增加”加密的数据。当我们将数据添加到系统中时,我们对数据行进行散列并将散列粘贴到加密数据中。然后继续“增加”数据。然后,当发送每月数据时,我们可以看到他们是否正在删除数据,并将数据库重新安装回安装后,因为加密值不会有任何增量,或者会有额外的散列不属于任何数据。
感谢
没有,因为如果他们放弃表格并重新创建它,那么数据将被清除,谢谢你的答案 –
@DavidWork,我对答案做了重大改写。请检查出来。 –
感谢您的更新。这绝对涵盖了我们希望检测的更多内容。我真正喜欢的一件事是,应用程序实际上可以删除记录并在hash_control表中重新创建散列,而不是仅执行软删除。我们也能够知道哪些/多少行被删除。 –