【发布时间】:2011-09-13 09:00:47
【问题描述】:
我必须为大型数据库表提供数据完整性。因此,如果狡猾的管理员手动更改表(不是通过 UI),我希望能够检测到它。
我的想法是为每条记录设置 HMAC,并在用户通过 UI 更改表时计算表的增量 HMAC:
- 计算第一条记录的 HMAC - HMAC_Current。
- 计算新记录的 HMAC - HMAC_i
- 将表的新 HMAC 计算为 HMAC_Current = HMAC(HMAC_Current + HMAC_i)。
优点:
- 用户每次通过 UI 添加记录时,无需为整个表计算 HMAC。
缺点:
- 当用户删除或更改记录时,我必须重新计算从该记录到表末尾的表的 HMAC。
- 当我想检查数据完整性时,我必须检查每条记录的 HMAC。然后从上到下计算整个表的 HMAC,并与 HMAC_Current 进行比较。
有没有更好的方法?
【问题讨论】:
-
管理员有可能是恶意的吗?因为那会改变一切。
-
您建议将 HMAC 存储在哪里? (提示:如果它是你的“狡猾的管理员”可以操作的地方,那就没用了)
-
好吧,当系统无法正常工作时,可能存在有争议的问题,但管理员声称“我没有更改 db 中的任何内容!”
-
我要将 HMAC 存储在管理员可以操作的附加表中,但 HMAC 的密钥将存储在应用程序中。
标签: c# database oracle data-integrity