我们的数据库中有审计表。
该表的记录是使用触发器完成的。
目前,没有什么可以阻止用户登录数据库服务器、从 Management Studio 打开表以及更改审计表中的数据。
有哪些可能的机制可以防止(或至少检测)审计数据篡改情况?
我正在考虑在审计表中添加一列,其中应包含一些根据该行中输入的值计算的哈希值。但是,由于审计是使用触发器完成的,因此恶意用户可以打开任何触发器并查看计算此哈希的逻辑。
EDIT:
我还不够清楚。应用程序用户无权访问数据库。我指的是像数据库管理员这样的用户,对数据库具有适当的权限。不过,如果这个数据库管理员登录并有权修改审计表,我希望至少有一些机制来检测这种篡改。
没有什么可以阻止某人通过 SQL 管理器访问您的数据库来更改内容。不过你可以让它显露出来。
基本上你需要使用HMACs http://en.wikipedia.org/wiki/HMAC它们是带键的哈希值。不幸的是,这会导致您需要密钥管理来确保密钥保密,而这在触发器中可能是不可能的。我们使用加密服务来提供密钥管理,但这是通过代码访问的。
您还需要考虑用户删除记录而不是更改其内容的能力。我们最终得到了两个 HMAC,一个使用记录的内容计算(以使对记录的更改变得明显),第二个使用当前记录 HMAC 和前一行的 HMAC 来使任何行删除篡改变得明显。
然后你需要担心删除第一条或最后一条记录。为此,我们使用始终具有相同内容的预告片和标题记录,如果这些内容不存在,则表的顶部或底部已被删除。标头的组合 HMAC 使用其后的记录而不是之前的记录(因为之前没有记录)。
当然,如果您要删除旧记录来管理存储的数据量,您将需要一种机制来在删除后添加新的标头记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)