如何确保表在SQL Server 2008中没有被篡改?

时间:2009-04-22 12:58:30

标签: sql-server security

我需要简单但可靠的机制来确保表在SQL Server 2008中没有被篡改。假设黑客只能访问和控制其中一个服务器(应用程序或数据库),但无法访问这两个服务器。任何链接或建议将不胜感激。

澄清。这里的“篡改”是指在将行插入表格后更新/删除行的能力。要保护的表是一种业务事务日志。

7 个答案:

答案 0 :(得分:4)

你的时间会更好地确保黑客根本无法进入,因为只要你开始做出如上所述的悲观假设,那么你就可以确定黑客获得进入两个服务器。

您可以通过触发器创建一个审核系统,只要有人对您的数据库服务器上的表/表进行插入/更新/删除,就可以使日志生效,但这并不能阻止获得SA访问权限的黑客审计表或主数据库。

专注于安全性,使用良好的代码来防止SQL注入攻击,确保在应用程序中仅使用他们需要的权限使用SQL登录帐户,确保数据库位于DMZ后面,而不是公开访问,适当的防火墙和外部的端口安全性,以确保只有您的面向Web / Public的服务端口是打开的。

如果这是针对生产环境而且超出了您的专业知识,那么有些安全公司会分析您的应用程序是否存在任何漏洞

答案 1 :(得分:1)

如果您的唯一目的是能够验证业务事务日志表的内容,则可以在应用程序服务器上的XML文件中存储哈希值(MD5或SHA)。当应用程序向数据库添加事务时,将哈希值添加到XML文件。然后,您可以通过确保...

来审核表中的数据
  • 文件中的元素数量和表格中的行数匹配
  • 对于表中的每一行,计算的哈希值(无论如何定义)与该行的文件中存储的值匹配

答案 2 :(得分:1)

如果你真的想要超越顶部,我建议如下:

  • 禁止对表进行任何直接写访问。根本不允许更新,通过存储过程执行插入。
  • 部分日志数据是字段的MD5校验和(不包括记录ID)。
  • 写入日志后,将记录ID和校验和发送到外部日志记录服务器。通过TCP广播执行此操作。这样,即使入侵者知道数据要进入外部机器,他们也不会知道哪一个(或多少个)。日志服务器只记录记录ID和校验和,不允许更新或修改。接收重复的ID应该会引发警报。您可能还需要验证是否以单调递增的顺序接收记录ID,但这可能会在高吞吐量环境中导致问题。

答案 3 :(得分:0)

在数据库上放置一个DDL触发器,以监视对数据库的任何更改。

答案 4 :(得分:0)

访问日志怎么样?您可以看到您的用户是否在数据库或Web应用程序用户中更改了某些内容。那么,您如何区分Web应用程序用户的正常活动和异常活动?

答案 5 :(得分:0)

确保服务器被正确锁定显然是你应该做的第一件事。

捕获错误编辑的可能解决方案是,您可以在一行中的所有字段上计算某种类型的校验和,并将其作为一个长而难以理解的字符串存储在该行中;如果存储过程执行了insert / update命令,则它可以在每次插入/更新时重新计算该校验和。如果有人直接编辑了数据,即通过Access或Management studio以及直接编辑的字段,则校验和将关闭,在下次访问时您可以检测到并采取措施。

当然,如果某人有权访问SP,那么一个有动力的黑客只会复制逻辑(或者只是使用SP),但它可能会阻止并抓住非恶意的人所造成的直接编辑错误,但他们不小心编辑了他们不应该的数据。

答案 6 :(得分:0)

首先,如果使用存储过程和nodynamic sql,则可以在proc级别而不是表级别设置权限。除了应用程序允许的内容之外,这可以防止黑客做任何事情。除了dbas之外,没有人可以访问生产中的表。

接下来,设置审计表以记录对数据的所有更改以及数据发生的时间和创建时间。如果有人进行了未经授权的更改,这可以用来轻松获取数据。

第三,确保运行良好的备份计划并每15分钟备份一次事务日志。确保您的dbas已经从备份中恢复。

在sql server 2008中,您可以使用ddl触发器来告诉您谁更改了表的结构而不是数据。