【问题标题】:How do I securely delete a row from a database?如何安全地从数据库中删除一行?
【发布时间】:2009-03-11 22:03:09
【问题描述】:

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

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

除了定期运行 COMPACT/VACUUM 之外,我还能做些什么吗?

谢天谢地,我们的备份将由其他人持有,他们可以保留已删除的信息。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    “不可恢复的删除”比听起来更难,而且超出了您的数据库。例如,您是否打算返回到磁带/备份上也存在该行的所有先前数据库实例,并在那里删除它?

    考虑您之前提到的定期删除和定期 VACUUMing。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我的理解是编辑一行会在数据库中创建该行的新副本,并将旧行标记为过时,这比简单地删除该行更糟糕
      【解决方案3】:

      也许我的想法有点不对劲,但您真的要这样删除用户吗?大多数身份和访问管理方法建议将用户留在身边但处于标记为已删除状态,以免失去审计能力(该用户在过去五年中做了什么)?

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

      也许您应该详细说明为什么这种不可撤销的删除是可取的......?

      【讨论】:

      • 我也同意这条路线。如果涉及办公室政治,那就看看这篇文章...adaptivepath.com/ideas/essays/archives/000251.php
      • 欧洲数据保护指令要求在不再需要时删除个人数据。因此,禁止保留它“以防万一”。该指令在所有欧盟成员国的法律中实施。可能是他的情况。
      • PCI DSS v3,要求 3.1 通过实施数据保留和处置政策、程序和流程,至少包括以下所有持卡人数据 (CHD) 存储:  限制数据存储量和保留时间符合法律、法规和业务要求  不再需要时安全删除数据的流程  持卡人数据的特定保留要求  用于识别和处理数据的季度流程安全删除超过定义保留时间的已存储持卡人数据。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 我的理解是这将在磁盘上创建一个新行,并将旧行标记为过时,而不是覆盖现有行。
          • @DavidAldridge 是的,它在所有 MVCC 数据库(所有现代 RDBMS)中都以这种方式工作
          • @Eloff 啊,但不是甲骨文。这就是我感到惊讶的原因,因为我在 Oracle 工作了 20 年后才开始接触 PostgreSQL。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-01
          • 2011-06-13
          • 1970-01-01
          • 2018-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多