我们的数据库中有审计表格。此表中的记录是使用触发器完成的。
目前,没有任何阻止用户登录数据库服务器、从management studio打开表以及更改审计表中数据的情况。
有哪些可能的机制可以防止(或至少检测到)审计数据篡改的情况?
我正在考虑在audit表中添加一列,该列应该包含一些根据该行中输入的值计算的散列。但是,由于审计是使用触发器完成的,因此恶意用户可以打开任何触发器并查看计算此哈希的逻辑。
编辑:
我说得不够清楚。应用程序用户没有访问数据库的权限。我指的是一些用户,如数据库管理员,对数据库有适当的权限。尽管如此,如果这个数据库管理员登录,并有权调和审计表,我希望有一些机制,以检测这种篡改至少。
发布于 2011-01-21 18:26:37
没有什么可以阻止通过SQL管理器访问您的数据库的人更改内容。不过,您可以将其设置为明显篡改。
基本上,您需要使用HMACs,它是键控散列。不幸的是,这导致您需要密钥管理来确保密钥保密,这在触发器中可能是不可能的。我们使用加密服务来提供密钥管理,但这是通过代码访问的。
您还需要考虑用户删除记录而不是更改其内容的能力。我们最终得到了两个HMAC,一个使用记录的内容计算(对记录进行明显的更改),第二个使用当前记录的HMAC和来自前一行的HMAC,以使任何行删除篡改都很明显。
然后,您需要担心删除第一个或最后一个x个记录。为此,我们使用尾部和标题记录,它们总是具有相同的内容,如果它们不存在,则表格的顶部或底部已被删除。报头的组合HMAC使用它后面的记录,而不是之前的记录(因为之前没有记录)。
当然,如果要删除旧记录以管理存储的数据量,则需要一种在删除后添加新标题记录的机制。
发布于 2011-01-21 18:55:39
以下是一些可能性:
发布于 2011-01-21 18:16:25
您可以启用更改跟踪,这样您就有了一种“对审计表的审计”。
如果您的基础架构管理得当,我猜用户没有sa权限,他们使用Management Studio查看使用其windows帐户登录的数据库,在这种情况下,您可以在该审核表上设置安全性,只有sa和其他管理帐户才能更改内容,而不能更改普通用户/开发人员帐户。
希望这能有所帮助。
https://stackoverflow.com/questions/4757554
复制相似问题