Löschen oder Anonymisieren?
Wenn man 100% sicher sein will, keine Kundendaten im System zu haben, sollte man diese Daten erst gar nicht in den Datenbank-Dump einschließen. Am einfachsten geht das mit dem Kommandozeilen-Tool n98-magerun von Christian Münch, das (neben vielen anderen) diese Funktion integriert. Selbstverständlich kann man die entsprechenden Datenbank-Tabellen auch im Nachhinein leeren.
Sollte man hingegen Kunden- und/oder Bestelldaten zum Testen benötigen, ist es häufig sehr aufwändig, eine ausreichende Anzahl Kunden oder Bestellungen manuell oder mit einem Skript anzulegen. Spätestens, wenn es um die Entwicklung von Statistikfunktionen oder um die Analyse eines einzelnen Kunden- oder Bestellungsdatensatzes geht, genügt dieser Ansatz nicht mehr. An dieser Stelle sollte man stattdessen die bestehenden Datensätze verwenden und anonymisieren.
Die richtigen Daten anonymisieren
Neben den offensichtlichen Kunden- und Bestellunsgdaten gibt es noch eine Reihe zusätzlicher Datensätze, die ebenfalls anonymisiert werden sollten:
- Kundenadressen
- Bestelladressen
- Quotes (Warenkörbe)
- Quote-Adressen
- Newsletter-Abonnenten
- prefix
- firstname
- middlename*
- lastname
- suffix*
- company
- street
- telephone
- fax*
- taxvat*
- remote_ip
Vorgehen bei der Ersetzung
Der einfachste Ansatz bei der Ersetzung wäre, Zufallszeichen einzufügen. Während dies den Zweck des Anonymisierens erfüllt, werden die Datensätze anschließend unlesbar. Um das zu vermeiden, können echte Daten eingesetzt werden, die aber natürlich keinen echten Personen entsprechen sollten. In meinem Modul nutze ich hierfür den Webservice fakester.biz, der Personendaten auch in größeren Mengen bereitstellt. Ein Datensatz sieht z.B. wie folgt aus (JSON-Format):{ "name":"Prohaska-McLaughlin", "first_name":"Manuela", "last_name":"Raynor", "prefix":"Mrs.", "suffix":"LLC", "city":"South Tristianview", "city_prefix":"New", "city_suffix":"stad", "country":"Armenia", "secondary_address":"Apt. 971", "state":"Louisiana", "state_abbr":"FL", "street_address":"235 Wolf Vista", "street_name":"Heathcote Ridge", "street_suffix":"Knolls", "zip_code":"45097", "bs":"enhance proactive technologies", "catch_phrase":"Balanced well-modulated focus group", "domain_name":"durgan.info", "domain_suffix":"org", "domain_word":"hamill", "email":"stewart.bauch@marvin.biz", "free_email":"gianni.bosco@gmail.com", "ip_v4_address":"180.229.218.93", "ip_v6_address":"a70c:b72c:6de:e671:f03c:a8b6:25c6:d74c", "user_name":"bret_borer" }Für die oben genannten Felder sind also entsprechende Datenfelder vorhanden. Schön wäre es natürlich noch, wenn in den einzelnen Datensätzen, die zusammen gehören, auch die gleichen Daten zum Ersetzen verwendet würden. Als Beispiel: Ein Kunde trägt üblicherweise den gleichen Namen in den Kundendaten, in seiner Kundendadresse im Adressebuch und in seiner Liefer- oder Rechnungsadresse bei Bestellungen ein. Dieser Name wird anschließend auch in die Bestellung und die Bestelladresse übernommen. Hier sollte also auch nach der Anonymisierung überall der gleiche Name stehen.
Das Modul: IntegerNet_Anonymizer
Zu den aufgelisteten Anforderungen habe ich ein Modul gebaut, das unter https://github.com/integer-net/Anonymizer auf GitHub bereit steht und kostenlos genutzt werden kann. Nach der Installation kann es wie folgt aufgerufen werden:- Im Admin-Bereich von Magento unter System -> Werkzeuge -> Anonymizer
- Per Kommandozeile: php -f shell/anonymizer.php (empfohlen)
- Anonymisiere Kundendaten
- Anonymisiere zugehörige Newsletter-Empfänger
- Anonymisiere zugehörige Warenkörbe
- Anonymisiere zugehörige Bestellungen
- Anonymisiere zugehörige Kundenadressen
- Anonymisiere zugehörige Warenkorbadressen
- Anonymisiere zugehörige Bestelladressen
- Anonymisiere verbleibende Newsletter-Empfänger
- Anonymisiere verbleibende Bestellungen
- Anonymisiere zugehörige Bestelladressen
- Anonymisiere verbleibende Warenkörbe
- Anonymisiere zugehörige Warenkorbadressen
- Anonymisiere verbleibende Bestellungadressen
- Anonymisiere zugehörige Warenkorbadressen
- Anonymisiere verbleibende Warenkorbadressen