【发布时间】:2009-03-11 22:03:09
【问题描述】:
出于合规性原因,当我从当前项目的数据库中删除用户的个人信息时,需要真正、不可恢复地删除相关行。
我们使用的数据库是postgres 8.x,
除了定期运行 COMPACT/VACUUM 之外,我还能做些什么吗?
谢天谢地,我们的备份将由其他人持有,他们可以保留已删除的信息。
【问题讨论】:
标签: sql postgresql
出于合规性原因,当我从当前项目的数据库中删除用户的个人信息时,需要真正、不可恢复地删除相关行。
我们使用的数据库是postgres 8.x,
除了定期运行 COMPACT/VACUUM 之外,我还能做些什么吗?
谢天谢地,我们的备份将由其他人持有,他们可以保留已删除的信息。
【问题讨论】:
标签: sql postgresql
“不可恢复的删除”比听起来更难,而且超出了您的数据库。例如,您是否打算返回到磁带/备份上也存在该行的所有先前数据库实例,并在那里删除它?
考虑您之前提到的定期删除和定期 VACUUMing。
【讨论】:
你备份你的数据库吗? - 如果是,请确保您也将其从备份中删除。
这是因为安全风险吗?在这种情况下,我会更改行中的数据,然后删除该行。
【讨论】:
也许我的想法有点不对劲,但您真的要这样删除用户吗?大多数身份和访问管理方法建议将用户留在身边但处于标记为已删除状态,以免失去审计能力(该用户在过去五年中做了什么)?
出于完整性合规性或恶意黑帽目的,可能需要删除用户信息。在这两种情况下,都没有一种删除方法可以保证不会留下用户存在的任何痕迹,正如其他帖子中所指出的那样。
也许您应该详细说明为什么这种不可撤销的删除是可取的......?
【讨论】:
为了完成 ACID 中的“D”,关系数据库使用事务日志类型系统来更改数据库。当进行删除时,将对数据的内存副本(缓冲区缓存)进行删除,然后以同步模式写入事务日志文件。如果数据库崩溃,事务日志将被重放以使系统恢复到正确的状态。因此,删除存在于必须删除的多个位置。只有在稍后的某个时间,才会从磁盘上的实际数据文件(以及任何索引)中“删除”记录。此时间量因数据库而异。
【讨论】:
这不是您在软件方面可以做到的。真正删除它是硬件问题,您需要物理销毁驱动器。
【讨论】:
用随机字符/日期/数字等覆盖记录怎么样?
【讨论】: