我有Oracle数据库的表“A”。
该表具有列“SensitiveValue”(定义长度的字符串)。
在某些时候,我需要将“SensitiveValue”字段中的数据设置为NULL。但是,我需要确保当设置为NULL时,该单元格中的数据将100%完全擦除,即使在物理级别上也无法通过检查硬盘来恢复。
任何人都可以给我一些解决方案,如何实现这一点与Oracle数据库或任何其他数据库类型,你看到类似的问题?
我试着搜索文档,但找不到任何相关的东西。
一种方法,我认为,可以用一些与列长度匹配的预设虚拟值完全覆盖行值,因此它实际上取代了物理数据。然而,这引入了处理这个特殊值而不是更标准的NULL的复杂性。
1条答案
按热度按时间okxuctiv1#
我不认为有任何基于软件的解决方案,提供了一个100%的安全删除的保证.有些解决方案可能是足够好的某些目的,但如果你需要的数据是不可恢复的,这不是一个编程任务.我会投票关闭这个问题“不编程相关”,但我认为它的编程相关的理解为什么某些任务不能用编程来解决.
在MVCC数据库中,页面被复制而不是就地覆盖。副本可能会存储在物理介质上的不同位置。当不再需要旧的行版本时,最终会将其删除。
不同品牌的RDBMS以不同的方式实现MVCC,但它们中的许多都是相似的,因为它们会复制数据。
在Oracle的情况下,这里有一些适用于Oracle 19的文档:
每当用户修改数据时,Oracle数据库都会创建撤消条目,并将其写入撤消段。撤消段包含已被未提交或最近提交的事务更改的数据的旧值。因此,数据库中可能存在同一数据的多个版本,这些版本都位于不同的时间点。
但是旧的行版本曾经使用过的空间不一定会在任何可预测的时间被覆盖。因此,理论上,这些位可以无限期地保留在那里。恢复物理驱动器的人仍然可以访问它们。
一些公司在物理驱动器停止服务时会进行破坏性擦除。但这对某些类型的SSD设备无效。Cf. https://cseweb.ucsd.edu//~swanson/papers/Fast2011SecErase.pdf
在我的上一份工作中,我们存储有关财务交易的数据。其中充满了敏感数据和个人身份信息。旧的SSD驱动器在停止使用时必须进行物理销毁。即使驱动器仍在工作,我们也有严格的政策,不能在安全级别较低的数据库服务器上重复使用它们。
另外请记住,敏感值记录在事务日志、查询日志和备份中。如果应用程序的用户界面中显示任何敏感值,则可以在客户端保存该值,或对其进行屏幕截图,或仅对其显示进行拍照。如果您需要实施100%安全擦除的策略,则必须考虑数据的整个生命周期,以及所有可能储存或查看过的地方