如何防止用户更改数据库表中的值/行?

时间:2013-09-05 18:01:57

标签: sql sql-server database encryption hash

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

以下是一些标准:

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

    我们说我的桌子有3行数据" A"," B"," C"。我的应用程序应该能够将值更改为" A"," B"," D",而不是我的用户(通过直接修改数据库)。另外,我希望如果我的应用程序将值更改为" A"," B"," D",则用户无法直接编辑该表以返回" A"," B"," C"。如果发生这种情况,应用程序将标记该表已被篡改。

1 个答案:

答案 0 :(得分:0)

我能想到的就是某种MAC或签名架构

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

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

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

您还可以将此设置为数字签名架构,其中您的应用程序仅保存验证密钥,并且某处的服务将为您的应用程序添加时间戳哈希并为数据签名...这样,您只需保留密钥该服务真正的秘密...