6

我们的数据库中有审计表。该表的记录是使用触发器完成的。

目前,没有什么可以阻止用户登录数据库服务器、从管理工作室打开表和更改审计表中的数据。

有哪些可能的机制可以防止(或至少检测)审计数据篡改案例?

我正在考虑在审计表中添加一列,该列应包含一些基于该行中输入的值计算的哈希值。但是,由于审计是使用触发器完成的,恶意用户可以打开任何触发器并查看计算此哈希的逻辑。

编辑:

我不够清楚。应用程序用户无权访问数据库。我指的是像 DB admin 这样的用户,对数据库具有适当的权限。尽管如此,如果这个数据库管理员登录并有权修改审计表,我希望至少有一些机制来检测这种篡改。

4

5 回答 5

9

没有什么可以阻止通过 SQL 管理器访问您的数据库的人更改内容。不过,您可以使其防篡改。

基本上,您需要使用带键散列的HMAC 。不幸的是,这导致您需要密钥管理以确保密钥保持机密,这在触发器中可能是不可能的。我们使用加密服务来提供密钥管理,但这是通过代码访问的。

您还需要考虑用户删除记录而不是更改其内容的能力。我们最终得到了两个 HMAC,一个使用记录的内容计算(使对记录的更改明显),第二个使用当前记录 HMAC 和上一行中的 HMAC 来使任何行删除篡改明显。

然后您需要担心删除第一个或最后一个 x 记录。为此,我们使用始终具有相同内容的尾部和标题记录,如果不存在,则表的顶部或底部已被删除。标头的组合 HMAC 使用它之后的记录而不是之前的记录(因为之前没有记录)。

当然,如果您要删除旧记录来管理您存储的数据量,您将需要一种机制来在删除后添加新的标头记录。

于 2011-01-21T10:26:36.863 回答
2

以下是一些可能性:

  • 您无法阻止或检测具有系统管理员(sa) 权限的人的篡改。如果您不信任您的系统管理员,您可能会遇到比这个特定问题更严重的问题。
  • 很难防止或检测本地管理员的篡改。这样的人可以在单用户模式下重新启动 SQL Server,并以系统管理员的身份使用 SQL 获得访问权限。
  • 要检测数据库所有者(dbo)的篡改,您可以使用 SQL Server 2008 中的服务器审核或早期版本的 SQL Server 中的服务器端SQL 跟踪
  • 您可以通过限制其他用户对相关触发器和审计表的权限来防止篡改。
于 2011-01-21T10:55:38.543 回答
1

you could enable Change Tracking so you have kind of "Audit on the audit table".

if your infrastructure is properly managed I guess users do not have sa rights and they use Management Studio to see the database logging in with their windows account, in this case you can set security on that audit table, only sa and other administrative accounts will be able to change content but not normal users/developer accounts.

Hope this helps.

于 2011-01-21T10:16:25.267 回答
0

您所描述的问题可能表明您的系统架构中存在更严重的问题。通常,用户甚至不应该直接访问运行数据库的机器。

您可能需要考虑一种架构,其中数据库机器与您的业务逻辑机器分离,并且只有它们可以访问。

如果您的用户决定尝试不通过您的客户端访问您的服务器,那么他们应该能够做的就是访问您决定公开的定义良好的 Web 服务。

用户没有理由能够访问数据库机器,或者拥有允许写入数据库的帐户的凭据。您似乎担心篡改审计信息。如何阻止恶意用户删除表或篡改功能数据?

于 2011-01-21T10:23:39.343 回答
0
  1. 将审计数据分离到其自己的架构中,然后设置权限,以便您关注的用户无权访问该架构。

  2. 使用完全独立的数据库,甚至可以在不同的机器上。

    我经常看到某种类型的发布/订阅模型用于从关系数据库发布审计数据,然后将该审计数据异步写入审计存储。

    也许您可以让您的触发器将审计数据写入队列。然后,您可以安排每隔几分钟运行一次的计划作业,以从队列中获取审核数据并将其写入您的审核存储。

于 2011-07-01T06:39:58.750 回答