经验之谈:使用Oracle的TDE特性加密(1)(2)
删除未加密数据的虚副本
Oracle 和底层主机操作系统使用优化的算法来更新数据块中的数据,目的是最大程度地减少降低性能的磁盘 I/O。在对现有列数据进行加密的特定情况下,通常发生的一件事是 Oracle 将加密的列数据写入到新数据块并且只是将之前未加密的值占用的空间标记为未使用。换句话说,Oracle 不会尝试清除较旧的未加密数据。只要所讨论的系统持续遇到大量更新活动,您就有理由确信当重用块空间时 Oracle 将最终覆盖较旧的未加密数据。但是考虑到我的客户正在准备进行合规性审计,我必须确保在加密过程之后立即擦除未加密的敏感数据。
进行了很多研究之后,我在 Oracle 技术网上发现了一个 FAQ 以及一个网志,该网志确认这一特定问题并提供了有关解决该问题的一些基本想法。一般的想法是将包含之前未加密数据的所有段移动到新的表空间(以及数据文件),然后使用一个操作系统实用程序删除旧数据文件。但该做法听起来容易,做起来难。事实是,在安全删除旧表空间及其数据文件之前,您很有可能需要移动大量段以及包含敏感数据的段。
为了使这一可能费时费力且易于出错的过程自动进行,我将一些脚本放在一起,以帮助我构建完成这一切所需的 DDL 语句。这里,我要向 Tom Kyte 表示谢意,因为此处的一些工作是修改我在 Asktom 站点找到的内容查询。列表 3 显示了我使用的整个过程的一个示例。



