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

如何安全地从数据库中删除行?

  •  4
  • NSherwin  · 技术社区  · 16 年前

    出于遵从性的原因,当我从当前项目中的数据库中删除用户的个人信息时,相关的行需要真正地、不可恢复地删除。

    我们使用的数据库是Postgres8.x,

    除了定期运行紧凑型/真空吸尘器,我还能做些什么吗?

    谢天谢地,我们的备份将由其他人保存,并且允许他们保留已删除的信息。

    6 回复  |  直到 16 年前
        1
  •  2
  •   John Feminella    16 年前

    “不可恢复的删除”比听起来更难,并且扩展到数据库之外。例如,您是否计划返回到磁带/备份上的所有以前的数据库实例(该行也存在),并将其删除?

    考虑一下前面提到的定期删除和定期清理。

        2
  •  1
  •   Skuta    16 年前

    是否备份数据库?-如果是,请确保您也将其从备份中删除。

    这是因为安全风险吗?在这种情况下,我将更改行中的数据,然后删除该行。

        3
  •  1
  •   Pontus Gagge    16 年前

    也许我已经偏离正切,但是你真的想删除这样的用户吗?大多数身份和访问管理方法都建议将用户保留在周围,但将其标记为“已删除”状态,以避免失去审核能力(此用户在过去五年中从事过哪些工作)?

    出于符合完整性的原因,或者出于恶意的黑帽目的,可能需要删除用户信息。在这两种情况下,都没有一种删除方法可以保证用户的存在不会留下任何痕迹,正如在其他文章中提到的那样。

    也许你应该详细说明为什么这样一个不可撤销的删除是可取的…?

        4
  •  1
  •   Logicalmind    16 年前

    为了在ACID中完成“D”,关系数据库使用事务日志类型系统来更改数据库。当进行删除时,将删除数据的内存副本(缓冲区缓存),然后以同步模式写入事务日志文件。如果数据库崩溃,事务日志将被重放,以使系统恢复到正确的状态。因此,删除存在于必须删除它的多个位置。只有在以后的某个时候,记录才会从磁盘上的实际数据文件(以及任何索引)中“删除”。根据数据库的不同,这段时间会有所不同。

        5
  •  0
  •   Andrew Clark    16 年前

    这不是你在软件方面可以做的事情。这是一个硬件问题,真正删除它,你需要物理销毁驱动器。

        6
  •  0
  •   David Aldridge    16 年前

    用随机字符/日期/数字等覆盖记录怎么样?