Eine SQL Server-Datenbankdatei 'bereinigen', die mit aktivierter Instant File Initialization erstellt wurde?

8

Ich habe die sofortige Dateiinitialisierung auf unserem SQL Server aktiviert, sodass der "leere" Teil der Datenbankdatei vor der Zuweisung nicht auf Null gesetzt wird. Nach meinem Verständnis bedeutet dies, dass die Datei "gelöschte" Daten enthalten kann.

Jetzt möchte ich eine Kopie einer Datenbank (wahrscheinlich eine Sicherungsdatei) außerhalb des Unternehmens senden. Aber es gibt all diese potenziell sensiblen "gelöschten" Daten in der Datei. Jetzt möchte ich den nicht verwendeten Teil der Datei auf Null setzen.

Ist das möglich? Ich stelle mir vor, ich könnte eine neue Datenbank erstellen und alles kopieren oder vielleicht eine Kopie der Datenbank auf einem anderen Server wiederherstellen, ohne dass die sofortige Dateiinitialisierung aktiviert ist, und dann mit einem ShrinkFile-Befehl aggressiv vorgehen, um den größten Teil oder den gesamten nicht verwendeten Teil der Datenbankdatei zu entfernen , aber gibt es eine weniger manuelle und zeitaufwändige Methode? Idealerweise ein Befehl, um SQL anzuweisen, die Datei auf Null zu setzen, wie dies der Fall gewesen wäre, wenn die sofortige Dateiinitialisierung nicht aktiviert worden wäre.

paulH
quelle
Als allgemeine Referenz kann die sofortige Initialisierung von Datendateien vorübergehend deaktiviert werden, ohne die Berechtigungen des Dienstkontos zu beeinträchtigen, indem das Ablaufverfolgungsflag 1806 verwendet wird, über das Paul Randal hier gebloggt hat .
Jon Seigel

Antworten:

5

Ein SQL Server - Backup sichert nur Ausdehnungen , die verwendet werden, um Daten zu halten. Die nicht verwendeten Speicherbereiche werden von der Sicherung zurückgelassen. Wenn eine Seite für Daten verwendet wird, wird sie für die Verwendung nach Bedarf formatiert, sodass diese Seite frei von alten Daten ist.

Daher müssen Sie die Datenbank nur sichern und an anderer Stelle wiederherstellen. Die wiederhergestellten Dateien haben dieselbe Größe wie die ursprüngliche Datenbank, die nicht verwendeten Speicherbereiche werden jedoch mithilfe der Funktionen des Zielservers erstellt. Dies kann vollständig oder sofort mithilfe der Festplattenblöcke auf dem Zielserver initialisiert werden.

Da es sich bei den Extents jedoch um die Ebene handelt, auf der Sicherungen durchgeführt werden, können die nicht verwendeten Seiten in dem Umfang möglicherweise noch einige Daten verfügbar machen, wenn sie auf einem anderen Server wiederhergestellt werden. Nicht so viel, wie auf dem Quellserver verfügbar gemacht werden könnte, da die nicht verwendeten Extents nicht wiederhergestellt werden.

RLF
quelle
1
Eigentlich ungenutzte Ausmaße . Theoretisch können sogar einige der verwendeten Speicherbereiche noch Speicherplatz mit "alten Daten" enthalten, was für SQLServer bedeutungslos ist, aber für einen Konkurrenten, der mit einem Hex-Editor und viel Freizeit ausgestattet ist, eine Fundgrube sein könnte. Wenn Ihre Daten jedoch so vertraulich sind, würden Sie dann nicht trotzdem alle Dateien auf Null setzen?
John Alan
@JohnAlan - Geändert, um die Exposition innerhalb von Ausmaßen zu bestätigen.
RLF
Die Daten sind nicht gerade GCHQ-Daten - es handelt sich lediglich um grundlegende Kundendaten und dergleichen. Daher ist es unwahrscheinlich, dass sich jemand zu viel Mühe gibt, um sie abzurufen. Ich hatte nicht bemerkt, dass Backups so funktionieren, obwohl es Sinn macht, dass es sollte. Wenn es keine andere schnelle und einfache Lösung gibt, reicht das wahrscheinlich aus.
PaulH
1

Haben Sie darüber nachgedacht, eine Kopie davon wiederherzustellen, TDE zu aktivieren, wodurch sie auf 0 gesetzt wird, und TDE dann wieder zu deaktivieren? Ich habe das nicht getestet, aber ich denke, es wird funktionieren, aber wir müssen es trotzdem testen.

Haben Sie noch etwas anderes in Betracht gezogen, eine Kopie davon mit deaktiviertem IFI wiederherzustellen, eine neue Dateigruppe mit neuen Dateien zu erstellen, die Größe zu ändern, die Cluster- und andere Indizes für die neue Dateigruppe neu zu erstellen und dann die vorhandene Dateigruppe zu löschen (wenn es sich um die primäre Dateigruppe handelt) Sie müssen es verkleinern, da Sie die Primärdaten nicht löschen können.

Ali Razeghi
quelle
Die Verwendung von TDE klingt nach einem interessanten Ansatz, obwohl ich nicht sicher bin, ob dadurch mehr unerwünschte Daten als bei der Sicherungs- und Wiederherstellungsmethode entfernt werden. Wenn jemand mehr Informationen darüber weiß, würde mich das interessieren.
PaulH