问题:
我想开发一个具有以下功能的日志管理系统:1-所有日志都从队列中收集并按顺序添加到数据库2-只能添加数据日志,系统不允许用户对其进行编辑。3-如果通过数据库更改日志数据或删除日志数据,系统必须能够识别此更改。
我的解决方案:我正在将日志序列化到Json。然后我计算散列(日志+上一个日志的散列),并将其存储在该日志中。为了检测变化,我重复这个方法,并将计算的哈希与存储的哈希进行比较。如果情况不同,则表示发生了变化。但这种方法有时不能正常工作。在数据没有任何更改的情况下,将计算不同的哈希。
你有更好的主意吗?
1.您可以将每行哈希值之和的哈希保存在其他表中,并在添加新行时更新它。
var hashOfHashes = hash(row1.hash + row2.hash +...);
2.性能更好的另一个解决方案是通过触发器来防止删除行,比如这个答案触发器来防止从表中任何删除或触发器来防止任何从表中删除。
CREATE OR ALTER TRIGGER triggerName
ON tableName
INSTEAD OF DELETE
AS
BEGIN
RAISERROR ('Deletion not supported on this table',16,1);
END;
如果你使用Ef-Core,这个波斯帖子可以帮助你。