AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Realdaten konsistent verwürfeln?

Ein Thema von stahli · begonnen am 26. Aug 2016 · letzter Beitrag vom 29. Aug 2016
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.157 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Realdaten konsistent verwürfeln?

  Alt 26. Aug 2016, 14:43
Die Demodaten will ich ggf. weiter geben können.
Es sollen also umfangreiche echte Daten sein, aber ohne realen Personen-Bezug (originale Form der Dateien und innere - auch zeitliche - Konsistenz).
Leg dir einfach eine Liste mit Vornamen und Nachnamen an und stelle diese per Random zu neuen Namen zusammen...

Original

[0] Petra;Putzig;Gartenstraße 7;53111; Bonn
[1] Rudi;Rastlos;Hofgarten 42;52223 Stolberg;

Daraus 5 Listen machen

Dann 5x Random; Randomwerte 1-5 müssen unterschiedlich sein.
Randomwert verbraucht, aus der Liste werfen..

So hast Du n Adressen aber keine ist real...
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 10:11
Leg dir einfach eine Liste mit Vornamen und Nachnamen an und stelle diese per Random zu neuen Namen zusammen...

Original

[0] Petra;Putzig;Gartenstraße 7;53111; Bonn
[1] Rudi;Rastlos;Hofgarten 42;52223 Stolberg;

Daraus 5 Listen machen

Dann 5x Random; Randomwerte 1-5 müssen unterschiedlich sein.
Randomwert verbraucht, aus der Liste werfen..

So hast Du n Adressen aber keine ist real...
Das halte ich aber für alles andere als sauber. Man hat immer noch die reellen Namen und Daten, nur in gequirlter Zuordnung. Datentechnisch halte ich das für nicht unbedenklich.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.356 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 11:37
Sorry, ich habe das etwas unscharf beschrieben, aber andererseits will ich mich nicht nur auf meinen Spezialfall beschränken. Vielleicht kann man das gleich etwas allgemeiner betrachten.

Grundsatz:
- Es sollen Testdaten für Entwickler erzeugt werden, die nach Struktur und Umfang Realdaten entsprechen, aber keinen Bezug auf reale Personen- oder Firmendaten (Namen, Adressen, Kontonummern, Schulden) zulassen.
- "Max Mustermann"-Datensätze sind unerwünscht, um Grenzfälle ausreichend testen zu können.

Spezialfall:
Bei uns liegen pro Monat mehrere Importdateien als csv vor, die monatlich in das Hauptprojekt importiert wurden.
Die Dateien bilden untereinander relationale Beziehungen ab und monatlich chronologische Änderungen der Importdaten.

allgemeines Problem:
Für eine Neuerstellung des Hauptprojektes sollen anonyme Demodaten zur Verfügung gestellt werden.
Einmalig im Hauptprojekt die Kundennamen und Adressen zu verwürfeln wäre kein sehr großes Problem. Allerdings wären dann beispielhaft z.B. Rechnungsnummern und Auftragsnummern noch original. Gut, das könnte man vielleicht so hinnehmen.

spezielles Problem:
Vorliegend sollen aber auch die gesamten Importfiles in Demodaten umgewandelt werden, also je alle 6 csv´s über mehrere Monate (ggf. auch über alle Jahre).

Das Tool müsste also erfahren, welche "Spalte" in welcher csv wie zu ändern ist.
Wenn Kunde Id=10, Name=Müller z.B. umgewandelt wurde in Kunde=10, Name=Meier müsste das in allen späteren Konvertierungen gleichermaßen gemacht werden.
Wenn gleichzeitig die Id geändert wird (Kunde Id=10, Name=Müller in Kunde=999, Name=Meier) geändert würde, müsste auch in Rechnungsdaten die KundenId angepasst werden.

Auch wäre sinnvoll, eMail-Adressen, Telefonnummern und Kontonummern zu verfälschen und künftig auch immer diese verfälschte Nummer wieder zu verwenden. Also wirklich über ein Dictionary.

Tool:
Ich habe schon eine Vorstellung, wie ich unsere Daten entsprechend umstellen könnte, wollte aber mal generelle Meinungen (zu Bedarfen und Lösungen) hören.
Ich werde mal ein Tool erstellen. Vielleicht kann man das ja dann allgemein einsetzen (wobei unser eigener Anwendungsfall vermutlich schon sehr speziell ist).


PS:
Danke für den Heise-Artikel. Habe ich mir gekauft.
Danke auch für das PHP-Tool. Das scheint aber nicht ganz zu passen, soweit ich das nachvollziehen kann.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (29. Aug 2016 um 12:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.399 Beiträge
 
Delphi 12 Athens
 
#4

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 12:33
Du hast doch eine Datenbank, wo die Spalten auch untereinander ordentlich verbunden sind.
Wozu also in den CSV das nochmal versuchen zu verknubbeln?

Importiere die Daten in eine leere/neue Datenbank, verändere dort die Namen und die Abhängigkeiten sollten sich dann alle von Alleine anpassen.
REFERENCES ON UPDATE CASCADE
Und so Dinge, wie "ausversehn" doppelte Namen, welche ausversehn entstehen könnten, sollten sich ebenfalls mit den passenden CHECK-CONSTRAINTS verhindern lassen.

Und dann kann man das gern wieder als CSV exportieren.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.356 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 13:28
Es geht bei uns auch darum, den regelmäßigen Datenimport neu zu realisieren.
Deshalb ist es nicht ausreichend, die Datenbanken umzustellen.
Wir benötigen auch über einen größeren Zeitraum passende umgestellte Demodaten für den Import-Test.

Aber ich sehe schon, das wird eher ein Sonderfall sein.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 16:13
Ich versuche mal die Aufgabenstellung etwas flacher darzustellen:

Ich bekommt irgendwann mal die Daten für:

Peter Müller, KundenID = 4711, Kontonummer = 4812 bei der Postbank.

Daraus sollen nun Testdaten werden, bei denen nicht mehr nachvollziehbar ist, welcher Person sie ursprünglich zugehörig waren.

Also wird aus o. g. Person nunmehr durch "irgendeinen Zufall" für die Testdaten:

Hansi Meier, KundenID = 1234, Kontonummer = 9876 bei der Targo-Bank.

Bei einer einmaligen Datenlieferung wäre das ok.

Nun kommt aber zu einem späteren Zeitpunkt mal wieder was an Daten für Peter Müller.
Bei den Originaldaten ist eine Zuordnung kein Problem.

Für die Testdaten muss der o. g. "irgendeinen Zufall" aber die Daten wiederum korrekt dem zufällig entstandenen Hansi Meier zugeordnet werden.

Letztlich wird hier also ein "reproduzierbarer Zufall" benötigt. Damit ist es aber letztlich keiner mehr.

Was meiner Meinung nach gehen müsste wäre:

Über die Originaldaten wird pro Satz irgendein Wert (Hash, MD5 ...) ermittelt und gespeichert.

Dieser Wert wird mit der eindeutigen ID der Testdaten verbunden.
  • Zuordnung Original zu Testdaten
  • Hashwert
  • TestdatenID
Nun kann man beim Eintreffen neuer Daten in der Tabelle den Wert des Originals suchen und die zu den Testdaten gehörige TestdatenID finden und damit eine entsprechende Zuordnung machen.

Über diese Tabelle wird aber immer ein Rückschluss von den Testdaten auf die Originaldaten möglich sein, es sei denn:

Den Algorithmus zur Ermmittlung des Hashwertes macht man nicht bekannt.

Aus dem MD5-Wert kann man z. B. nicht zurückschließen, wie der Originalwert war. Bei ihm ist die Eindeutigkeit aber nicht sichergestellt.
Aber: MD5 über Vorname + MD5 über Nachname + MD5 über KundenID sollten sicher reichen.

Eine "Rückwärtssuche" über die TestdatenID in dieser Tabelle und dann diese drei MD5-Werte ermitteln, um ans Original zu kommen, dürfte schon etwas "umfangreicher" werden, da für alle Originaldaten geprüft werden muss, ob sie den entsprechenden Wert ergeben. Ist der Algorithmus nicht bekann, dürfte es sehr schwierig werden.

Wenn sichergestellt ist, dass die Entwickler ... keinen Zugriff auf diese Tabelle bekommen, dürfte ein ausreichend sicherer Schutz der Originaldaten gegeben sein.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.356 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Realdaten konsistent verwürfeln?

  Alt 29. Aug 2016, 16:32
Die Zusammenfassung ist korrekt aber ich denke eine Lösung ohne Hashwerte an.

aus
Peter Müller, KundenID = 4711, Kontonummer = 4812 bei der Postbank
wird
Hansi Meier, KundenID = 1234, Kontonummer = 9876 bei der Targo-Bank


Ich werde dafür ein Dictionary benutzen.

Beim ersten mal wird für den ersten Kundendatensatz:
"Kunde: Peter Müller" = "Hansi Meier"
"KundenId: 4711" = "9876"
"Bank: Postbank" = "Targo-Bank"
angelegt.

Die Zielwerte werden pro neuem Eintrag für jedes Feld aus einem zufälligen Record aus dem realen Datenbestand geholt (und auf Wunsch verstümmelt) oder auf Wunsch neu generiert.

Wenn künftig "Kunde: Peter Müller" verwendet wird, wird der immer in "Hansi Meier" übersetzt.
Wenn eine Rechnung an "KundenId: 4711" geht, wird die ID in 9876 geändert.

Dazu muss das Tool sozusagen global für alle csv erfahren, welche Zuordnungen die einzelnen Felder tatsächlich haben und wie diese anzupassen sind.


Vielleicht muss ich noch etwas präzisieren: Ich möchte einen Stapel von z.B. 100*6 csv-Dateien auf einen Rutsch verändern, so dass 600 neue csv-Dateien entstehen, die in sich weiterhin konsistent sind aber möglichst wenig Rückschlüsse auf die Originaldateien zulassen.
Es geht also nicht um einen Import in das Hauptprojekt sondern um eine Anonymisierung vorliegender externer Importdaten zu Testzwecken.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz