“清除”启用了即时文件初始化的SQL Server数据库文件?


8

我在SQL Server上启用了即时文件初始化,因此数据库文件的“空”部分在分配之前没有清零。我的理解是,这意味着该文件可能包含“已删除”数据。

因此,现在我想向公司外部发送数据库的副本(可能是备份文件)。但是,所有潜在的敏感“已删除”数据都位于文件内部。现在,我想将文件的未使用部分归零。

那可能吗?我想我可以创建一个新数据库并复制所有内容,或者在不启用即时文件初始化的情况下将数据库的副本还原到另一台服务器,然后使用ShrinkFile命令主动删除数据库文件的大部分或全部未使用部分,但是有没有那么耗时的手动方法?理想情况下,该命令告诉SQL将文件归零,就像未启用即时文件初始化的情况一样。


作为一般参考,可以通过使用跟踪标志1806来临时禁用即时数据文件初始化,而不会弄乱服务帐户许可权,因为Paul Randal在此处发了博客。
乔恩·塞格尔

Answers:


5

SQL Server BACKUP仅备份用于保存数据的扩展区。备份会留下未使用的扩展区。当页面用于数据时,将根据需要对其进行格式化以供使用,因此该页面将没有旧数据。

因此,您所需要做的就是备份数据库并将其还原到其他位置。还原的文件将具有与原始数据库相同的大小,但是将使用目标服务器的功能来创建未使用的扩展区。这可以完全初始化,也可以使用目标服务器上的磁盘块立即初始化。

但是,由于扩展区是进行备份的级别,扩展区中的未使用页面在另一台服务器上还原时仍可能会暴露一些数据。由于不会还原未使用的扩展数据块,因此与在源服务器上公开的数据不一样。


1
实际未使用的范围。从理论上讲,甚至某些使用的扩展区仍然可以包含带有“旧数据”的空间,这对于SQLServer来说是毫无意义的运球,但对于拥有十六进制编辑器和大量业余时间的竞争对手来说,可能是一个宝库。如果您的数据如此敏感,那么您是否将所有文件归零?
约翰·艾伦

@JohnAlan-修改为在范围内确认暴露。
RLF

数据不完全是GCHQ的东西-仅仅是基本的客户数据之类,因此不太可能有人会花太多精力来检索它。我没有意识到备份可以那样工作,尽管应该这样做是有意义的。如果没有其他快速而简单的解决方案,那么可能会做到。
2013年

1

您是否考虑过还原它的副本,启用TDE并将其强制为0,然后再次禁用TDE?我还没有测试过,但是我认为它可以工作,但是我们必须对其进行测试。

还有其他事情,您是否考虑过在禁用IFI的情况下还原它的副本,使用新文件创建一个新文件组,对其进行大小调整,在该新文件组上重建群集索引和其他索引,然后删除现有文件组(如果它是主文件组)您必须缩小它,因为您不能删除主要的)


使用TDE听起来是一种有趣的方法,尽管我不确定它是否会删除比备份和还原方法更多的不需要的数据。如果有人知道更多有关此的信息,那么我将有兴趣知道。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.