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".
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.
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."
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".
Ich bin mir nicht sicher, ob das die Anforderungen des DOD erfüllt, aber zumindest würde ich das Folgende durchgehen.
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.
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:
UPDATE
s in der Tabelle aus, um alte Daten zu zerstören. CleanSweep
Speicherplatz auf der Festplatte belegt durch alte Transaktionsprotokolle. 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.
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.
Tags und Links sql-server sql-server-2008