Wie kann ich sicher einige Daten mit SQL Server 2008 zerstören? (mit DoD Secure Wipe oder einem Äquivalent)

7

Einer meiner Kunden möchte, dass ich einige seiner alten Daten regelmäßig "richtig" zerstöre, und ich evaluiere den besten Weg, dies zu tun.

Die Daten befinden sich in einer Tabelle, und ich möchte einige der darin enthaltenen Zeilen zerstören.

Ich könnte es manuell machen, indem ich die Datenbank auf einem anderen Computer lösche / exportiere / die Festplatte entziehe / die gespeicherten Daten neu importiere, aber ich brauche eine automatische Lösung.

Gibt es eine Entsprechung zum Befehl delete (wie in delete * from foo), der eine sichere Zerstörung der Daten bewirkt (mit DoD secure wipe, oder so ähnlich?)

Sehen Sie andere Möglichkeiten zum automatischen Löschen?

Übrigens, ich weiß, dass die Wahrscheinlichkeit, dass jemand mit dem Befehl sql delete Daten löscht, sehr klein ist, aber einige meiner Kunden benötigen sie. Bitte machen Sie diese Frage nicht zu einer globalen Debatte über das Thema Datenentsorgungsprozeduren!

Bearbeiten : Das Problem, das ich ansprechen möchte, ist nicht "Wie soll ich die Daten zerstören, damit sie nicht wiederhergestellt werden kann", sondern "Wie kann ich meine Kunden davon überzeugen, dass ihre Daten nicht wiederhergestellt werden können".

    
Brann 16.02.2009, 15:09
quelle

7 Antworten

7

Verwenden Sie eine Form der Verschlüsselung, um die Datenfelder in der Tabelle zu speichern.

Wenn Sie sich zum "Löschen" entschließen, verschlüsseln Sie die Daten, die Sie weiterhin mit einem neuen Schlüssel verwenden möchten, erneut. Verwerfen Sie den alten Schlüssel und löschen Sie die mit dem alten Schlüssel verschlüsselten Zeilen. Schrumpf.

Selbst wenn jemand die Zeilen wiederherstellt, ohne den alten Schlüssel, kann niemand die Daten wiederherstellen. Stellen Sie nur sicher, dass der alte Schlüssel wirklich verworfen wird - Sie können ihn nur auf einem einzigen USB-Stick haben und den Stick usw. zerstören.

    
Sunny Milenov 16.02.2009 15:30
quelle
7

Von Onlinedokumentation :

  

Löschen von Vorgängen aus einer Tabelle oder   Aktualisiere Operationen, die eine Zeile verursachen   Bewegung kann sofort Platz frei machen   eine Seite durch Entfernen von Verweisen auf die   Reihe. Allerdings unter bestimmten   Umstände, die Reihe kann physisch   Bleiben Sie als Ghost auf der Datenseite   Aufzeichnung. Ghost-Datensätze sind in regelmäßigen Abständen   durch einen Hintergrundprozess entfernt. Dies   Restdaten werden nicht von der zurückgegeben   Datenbankmodul als Antwort auf   Abfragen. In Umgebungen in   welche die physische Sicherheit der   Daten oder Backup-Dateien sind in Gefahr, Sie   kann sp_clean_db_free_space verwenden   bereinige diese Ghost-Records.

Dies sollte Ihre "freien" Datenseiten auf Null setzen. Es kann auch verwendet werden, wenn Instant Initialization verwendet wurde, aber Sie haben entschieden, dass Sie stattdessen Seiten auf Null setzen möchten.

Zur Beantwortung Ihrer aktualisierten Frage "Wie kann ich meine Kunden davon überzeugen, dass ihre Daten nicht wiederhergestellt werden können", wird in diesem BOL-Eintrag eindeutig angegeben, dass "Ghost-Datensätze regelmäßig durch einen Hintergrundprozess entfernt werden."

    
Taylor Gerring 25.02.2009 17:07
quelle
3

Grundsätzlich nein. Die Standardoperation wird es nicht tun, und wenn es das tat, könnten die Daten noch aus Transaktionsprotokollen usw. rekonstruiert werden. Wahrscheinlich kommt es am nächsten, wenn Sie es extern machen, die Datenbank kopieren und auf einem anderen Gerät löschen und dann Quality Scrub Löschen auf dem alten Gerät, aber als ein Sicherheits-Typ Ich bin mir nicht sicher, ich würde sogar sagen wollen, dass das eine Delete war.

Sicheres Löschen ist ein schwieriges Problem. Sie könnten besser mit einem kryptographischen Ansatz, wie Radia Perlman "Ephemerizer".

    
Charlie Martin 16.02.2009 15:24
quelle
1

Ich bin mir nicht sicher, ob das die Anforderungen des DOD erfüllt, aber zumindest würde ich das Folgende durchgehen.

  1. Lösche die Datensätze wie üblich
  2. Erstellen Sie eine neue Sicherungskopie der Datenbank (für zukünftige Verwendung)
  3. Löschen Sie alle vorhandenen Backups (da sie über die Daten verfügen), indem Sie einen standardmäßigen Dateilöschprozess verwenden, der die Standards
  4. erfüllt
  5. Verkleinern Sie die Datenbank, um den nicht verwendeten Speicherplatz aus den gelöschten Datensätzen freizugeben.

Ich denke, das wird Sie ziemlich nah bringen, aber der Schlüssel ist die Verwaltung der Schrumpfoperation, bei der ich nicht 100% sicher bin, wie das Daten löscht / verarbeitet. Zweitens wäre das Entfernen der alten Backups das "größte Risiko", wenn Sie meiner Meinung nach nach Risikopunkten suchen.

    
Mitchel Sellers 16.02.2009 15:22
quelle
1

Tatsächlich sind die Chancen, die mit DELETE zerstörten Daten zu erhalten ziemlich groß, nahe bei 100% :)

Daten, die Sie löschen, werden im Transaktionsprotokoll gespeichert. Dies ist ein Teil der Funktionsweise der Transaktionen. In einem anderen Fall wäre es nicht möglich, ROLLBACK eine Transaktion auszuführen, oder COMMIT würde ewig dauern (wie in alten Versionen von PostgreSQL ).

Am besten können Sie mit den Datendateien nicht umgehen:

  1. Löschen Sie Ihre Daten.
    • Führe mehrere UPDATE s in der Tabelle aus, um alte Daten zu zerstören.
    • Führen Sie mehrere große Transaktionen aus und binden Sie sie an , damit das Transaktionslog abschneidet. Wie viel genau hängt von Ihrer Protokollgröße ab.
    • CleanSweep Speicherplatz auf der Festplatte belegt durch alte Transaktionsprotokolle.
Quassnoi 16.02.2009 15:33
quelle
1

Löschen Sie die Daten. Führen Sie eine einfache Sicherung und Wiederherstellung auf einer neuen Festplatte durch und brennen Sie die alte Festplatte.

Das Zerstören von Objekten ist die einzige Möglichkeit, Leute wirklich davon zu überzeugen, dass "Dinge" wirklich weg sind.

    
CodingBarfield 17.02.2009 15:37
quelle
0

Nun, ich spiele hier nur, aber Sie versuchen das, es wird einigermaßen sicher sein.

Verwenden Sie kein typisches Backup.

Schreiben Sie das Schema aus, falls Sie es noch nicht getan haben.

Schreiben Sie alle Daten aus, damit alle aktuellen Daten mit einem Skript mit vielen INSERT-Anweisungen eingefügt werden können. Die gelöschten Daten werden offensichtlich nicht in dieser Datei angezeigt. Natürlich wollen Sie Bulk Insert und all das verwenden, um die Daten dorthin zurück zu bekommen.

Verwenden Sie jetzt sdelete , um alle Datendateien und Protokolle zu löschen, die mit der Datenbank verknüpft sind. Stellen Sie jetzt das Skript zum Einfügen wieder her. :)

Übrigens, Ihre Frage und die Bearbeitung, die Sie gemacht haben, sagen, Sie wollen keine Lösung, sondern einen Grund, warum Sie Ihrer ganzen Frage nicht widersprechen. Wie auch immer, ein guter Grund, es nicht zu tun, ist, dass niemand es tut. Wenn Sie etwas in der Computertechnik tun wollen (anders als das Erstellen einer brandneuen Art von Anwendung oder etwas Ähnliches), dass niemand sonst tut, ist es wahrscheinlich eine schlechte Idee. Es gibt meines Wissens keine akademischen oder DoD-Papiere, die eine Methode beschreiben, dies zu tun.

Das größere Problem besteht darin, welche Informationen von den Datensätzen, die Sie gelöscht haben, in Datensätze "geleakt" werden, die nicht gelöscht wurden. Beachten Sie, hier meine ich "Leck" im Sinne des Informationsflusses.

Obwohl, um ehrlich zu sein, die oben beschriebene Methode im Wesentlichen Ihr Ziel erreichen würde.

    
BobbyShaftoe 20.02.2009 08:01
quelle

Tags und Links