代码之家  ›  专栏  ›  技术社区  ›  Prankster

如何确保SQL Server 2008中的表未被篡改?

  •  0
  • Prankster  · 技术社区  · 17 年前

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

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

    7 回复  |  直到 17 年前
        1
  •  4
  •   Eoin Campbell    17 年前

    你最好把时间花在确保黑客根本无法进入上,因为一旦你开始做出上述悲观假设,你就可以确定黑客 进入两个服务器。

    您可以通过触发器创建一个审计系统,每当有人对DB服务器上的表进行插入/更新/删除操作时,该系统都会生成日志实体,但这并不能阻止黑客通过对您的审计表或主DB进行核操作而获得SA访问权。

        2
  •  1
  •   Adam Robinson    17 年前

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

    • 对于表中的每一行,计算的哈希值(无论您如何定义)都与该行存储在文件中的值相匹配
        3
  •  1
  •   TMN    17 年前

    • 日志数据的一部分是字段的MD5校验和(不包括记录ID)。
    • 写入日志后,将记录ID和校验和发送到外部日志服务器。通过TCP广播执行此操作。这样,即使入侵者知道数据将被传送到外部机器,他们也不知道是哪台(或多少台)。日志服务器只记录记录ID和校验和,不允许更新或修改。收到重复的ID应导致发出警报。您可能还希望验证是否以单调递增的顺序接收记录ID,但这可能会在高吞吐量环境中导致问题。
        4
  •  0
  •   CodeMonkey1313    17 年前

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

        5
  •  0
  •   User    17 年前

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

        6
  •  0
  •   E.J. Brennan    17 年前

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

    当然,如果有人可以访问SP,那么一个有动机的黑客只会复制逻辑(或者只使用SP),但这可能会阻止并捕获那些不是恶意的人所犯的草率的直接编辑错误,但是他们无意中编辑了他们不应该编辑的数据。

        7
  •  0
  •   HLGEM    17 年前

    首先,如果使用存储过程和节点动态sql,则可以在过程级别而不是表级别设置权限。这可以保护你不让黑客做任何事情,除非应用程序允许。除了DBA之外,任何人都不应该对生产中的表有任何访问权限。

    接下来,设置审核表以记录对数据的所有更改,以及更改发生的时间和更改人。如果有人进行未经授权的更改,可以使用此功能轻松地获取数据。

    第三,确保您有一个良好的备份计划,每15分钟备份一次事务日志。确保您的DBA有从备份恢复的练习。

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