1

我有一个数据库表,我想阻止用户修改值/行。我怎样才能做到这一点?

以下是一些标准:

  1. 要保护的表有一个单列,其中数据以纯文本形式存储。
  2. 如果需要,可以将其他列添加到表中以帮助保护单个列。
  3. 我的应用程序需要能够添加、编辑和删除表中的值/行。
  4. 对于这个问题,我假设用户对数据库具有完全和直接的管理员/读/写访问权限,即用户可以直接登录数据库执行查询。
  5. 如果用户直接在数据库中更改值,我的应用程序需要在检查表时标记这已发生。
  6. 数据库中还有其他表,但不需要以这种方式保护它们。如果需要,可以使用它们来帮助保护第一个表。
  7. 与数据库引擎无关的解决方案会很好,但我使用的是 SQL Server 2005 或更高版本。

例如:

假设我的表有 3 行数据“A”、“B”、“C”。我的应用程序应该能够将值更改为“A”、“B”、“D”,但不能更改我的用户(通过直接修改数据库)。此外,我希望如果我的应用程序将值更改为“A”、“B”、“D”,用户无法直接编辑表格以返回“A”、“B”、“C”。如果发生这种情况,应用程序将标记该表已被篡改。

4

1 回答 1

1

我能想到的只是某种 MAC 或签名模式

从您要保护的列中的数据派生一个哈希值,加上一个秘密值以获得消息身份验证代码,并将其存储在另一列中......

当您想要测试完整性时,您的应用程序可以再次计算该 MAC ...

问题:该秘密需要存储在某个地方...

您还可以将其设置为数字签名模式,您的应用程序仅保存验证密钥,而某处的服务将为您的应用程序添加时间戳并为数据签名……这样,您只需保留该服务的密钥一个真正的秘密......

于 2013-09-06T00:04:31.240 回答