2012-01-19 78 views
2

我需要实现Gutmann的安全删除数据库表中的一些数据的算法。 首先,它在数据库中有效吗?安全删除java实现

我不确定这35个步骤。对于1-4和32-35,很明显,会生成一些随机数据。但是步骤5-31我不确定。 在维基百科表中,给定步骤有3个字节,这些步骤是随机运行的,其中一些步骤是相同的​​。见第八步,用十六进制:49 24 92.现在我们假设我有一列要擦除其长度为25个字节的列。我怎么去,以3个字节为基础?第25个字节呢?

+4

该算法用于擦除磁盘驱动器。没有办法安全地擦除数据库列(或数据库实现内的任何其他组件)。 –

+0

安全删除数据库是什么意思?你能详细说明吗? – kosa

+0

没有数据库擦除,擦除某些表格列的数据。如果它适用于文件,为什么不应该在数据库中工作?或者,至少应该有一个方法... – braincell

回答

2

不幸的是,问题在于安全擦除磁盘上数据的唯一方法是“擦除”驱动器上任何未使用的扇区。这适用于基于文件的解决方案,因为当您删除文件时,操作系统将扇区标记为可用(即:未使用),因此您可以将其擦除。

数据库的问题在于您无法控制实际的文件结构;数据库会为您抽象所有内容。因此,例如,您可以删除数据库中的一列或一行中的数据,但根据数据库处理删除的方式,数据最初所在的扇区仍可能被数据库标记为正在使用。由于该表的所有数据都保持为同一文件的一部分(即:数据库的持久文件状态),因此无法确定数据最初放置在磁盘上的位置,而且无法确保数据库不存在“ t已经为其他东西重新获得了空间。

即使您要安全地在DB中写入/擦除/重写相同的字段,也不能保证(实际上也不太可能)数据将写入驱动器上的相同扇区。所有这些都说明了,已经有几项研究表明,从磁性媒体中恢复被删除/重写的数据(相对于刚刚释放的扇区空间)虽然在理论上是可行的,但是存在很多问题并且不太可能成功。

请记住,在处理SSD(因为正在使用的扇区可能发生变化以确保数据写入均匀分布)以及甚至在某些RAID设备中时,安全擦除数据的原理会发生显着变化。

不幸的是,有了SSD,我不知道是否有任何解决方案来确保所有部门都已完全清洁。使用RAID时,您需要中断RAID,然后确保独立擦除每个驱动器。

+0

谢谢埃里克,你有道理。 – braincell

0

为什么值得我喜欢提及这篇论文http://dl.acm.org/citation.cfm?id=1496285,它基本上规定在今天的磁盘上你不需要两次以上的通行证,通常一次就足够了。 我知道它并没有回答关于如何为数据库实现这个问题的问题,我将第二个所有的评论,这似乎不可能在SQL级别上做。

+0

最近有一段关于高清制造商使用基于硬件的加密技术向驱动器写入数据时的讨论,因此在处理硬盘时需要擦除驱动器已成为过去,但所有这些都需要改变加密密钥。将相当于即时擦拭。当然,这只会在擦除整个驱动器时使用,而不仅仅是一些已释放的空间。 –

+0

有趣的是,我不得不承认,我并不关注HD技术近期的发展 – stryba