Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Datenhygiene für die DSGVO

    hbauer

    • Experte
    • Beiträge: 1.097
    Datenhygiene für die DSGVO
    am: 23. Februar 2018, 15:58:16
    Gemäss der neuen DSGVO gilt ja das Prinzip der Datenminimierung und Daten dürfen nur so lange gespeichert werden wie es notwendig ist.

    Aus diesem Grund wollen wir alle Kundenadressen älter als x Jahre löschen und alle Bestellungen älter als 2 Jahre anonymisieren. (Bitte keine Diskussion warum und weshalb)

    Mein aktueller Ansatz dies regelmässig über sql Befehle durchzuführen. Meine ersten Test sind recht vielversprechend und ich konnte keine Fehler entdecken. Ich bin aber eher kein SQL Spezialist.

    Vielleicht mag ja mal der eine oder andere drüberschauen oder es ausprobieren und Feedback geben.

    1. Kunden Löschen

    Welche Kunden sind es?

    Code: SQL  [Auswählen]
    SELECT DISTINCT customers_id,customers_lastname
            FROM customers WHERE customers_id > 1 AND customers_id NOT IN (
                SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY)
            )

    Löschbefehle für die unterschiedlichen Datenbanken

    Code: SQL  [Auswählen]
    DELETE FROM `address_book` WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers` WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_basket`  WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_basket_attributes` WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_info`  WHERE customers_info_id > 1 AND customers_info_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_ip`  WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_memo` WHERE  customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));
    DELETE FROM `customers_status_history`  WHERE customers_id > 1 AND customers_id NOT IN (SELECT DISTINCT customers_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY));

    2. Bestellungen anonymisieren

    Welche Bestellungen sind es?

    Code: SQL  [Auswählen]
    SELECT customers_id,customers_firstname,customers_lastname,billing_firstname, delivery_name FROM orders WHERE customers_id>1 AND date_purchased < DATE_SUB(CURDATE(),INTERVAL 1000 DAY);

    und updaten

    Code: SQL  [Auswählen]
    UPDATE orders SET  
    customers_name='ab',
    delivery_name='ab',
    billing_name='ab',
    customers_firstname='a',
    delivery_firstname='a',
    billing_firstname='a',
    billing_name='ab',
    billing_firstname='a',
    billing_lastname='b',
    customers_company ='c',
    delivery_company ='c',
    billing_company ='c',
    customers_street_address ='d 2',
    delivery_street_address ='d 2',
    billing_street_address ='d 2',
    customers_telephone = '4 ',
    customers_ip = '127.0.0.1'
    customers_email_address = 'dd@ail.com '
    WHERE customers_id>1 AND date_purchased < DATE_SUB(CURDATE(),INTERVAL 1000 DAY);

    Welche Kommentare müssen gelöscht werden?

    Code: SQL  [Auswählen]
    SELECT DISTINCT orders_id FROM orders_status_history WHERE  orders_id IN (SELECT orders_id FROM orders WHERE date_purchased > DATE_SUB(CURDATE(),INTERVAL 730 DAY)))

    und Löschen

    Code: SQL  [Auswählen]
    UPDATE orders_status_history SET comments='v '  WHERE  orders_id IN ( SELECT orders_id FROM orders WHERE date_purchased < DATE_SUB(CURDATE(),INTERVAL 730 DAY));


    Linkback: https://www.modified-shop.org/forum/index.php?topic=38640.0

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #1 am: 23. Februar 2018, 19:43:33
    :good:

    Guter Ansatz. Denke da auch schon eine Weile dran rum. Bei OSC hatte ich mal mit einer Erweiterung für inaktive User ausprobiert, inkl. Löschfunktion und Vorwarnung an Kunden (so nach dem Motto: "Ihr Account ist seit über 2 Jahren inaktiv und wird in 7 Tagen gelöscht. Wenn Sie dies nicht möchten, loggen Sie sich bitte kurz in ihrem Kundenkonto ein." ). Ist schon ewig her.

    Bei den Kunden würde ich aber als Grundlage aus der Tabelle customers_info die Werte aus customers_info_date_of_last_logon oder wenn diese leer (NULL) sind customers_info_date_account_created nehmen.

    christianwagner

    • Mitglied
    • Beiträge: 135
    Re: Datenhygiene für die DSGVO
    Antwort #2 am: 23. Februar 2018, 20:02:52
    ich muss aber trotzdem fragen:

    und das beißt sich nicht mit einer betriebsprüfung wo der prüfer neben emails auch die bestellungen im backend anschauen will?

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #3 am: 23. Februar 2018, 21:43:41
    Kein Plan :D

    Aber was will denn der Betriebsprüfer sagen, wenn man ihm sagt, dass aus Datenschutzgründen die Bestellungen anonymisiert wurden. Wir können ja nichts dafür, dass wir uns an Gesetze halten.

    Er hat aber die Möglichkeit die E-Mails mit Bestellnummern und Bestellwert mit dem Backend abzugleichen. In der E-Mail stehen ja noch alle Kundendaten. Damit sollte alles nachvollziehbar sein.

    Geht das, dass man die Namen per SQL Script auf die Anfangsbuchstaben reduziert? Den Ort mit PLZ vielleicht noch lassen und den Rest löschen oder xxxx

    BTW: Alle Gastbestellungen kann man auch gleich nach X-Tagen pauschal anonymisieren.

    Viol

    • Fördermitglied
    • Beiträge: 2.279
    Re: Datenhygiene für die DSGVO
    Antwort #4 am: 24. Februar 2018, 10:35:56

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #5 am: 24. Februar 2018, 11:18:37
    Bestellmail vorhanden. Rechnung/Lieferschein müssen eh aufgehoben werden und enthält Lieferdatum. Wenn man noch die Archivfunktion aktiviert, hat man auch die Statusmitteilungen per Mail vorliegen. Was will also der Prüfer in meinem Backend noch sehen?
    Gerade unter dem Aspekt dass ich alle Daten im Backend mit wenigen Mausklicks ändern kann, disqualifiziert in meinen Augen diesen Bereich für eine verlässliche Überprüfung. Aber das ist nur meine Laien Meinung. Zum Glück bin ich nur für die Technik zuständig  :-D

    Man könnte natürlich auch ein Backup der DB auf DVD brennen und danach im Shop anonymisieren. Braucht man dann nur einen 2. Shop zum schönen darstellen der Daten bei einer Prüfung  :flee-mrgreen:

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #6 am: 07. April 2018, 14:29:56
    Ich würde das mit den DB Inhalt kürzen gerne mal probieren. Gibt es einen SQL Befehl um den Inhalt einer Zelle auf den ersten Buchstaben zu kürzen?

    Oder geht das nur über den Umweg erst auslesen, dann kürzen und dann mit dem gekürzten Wert aktualisieren?

    hbauer

    • Experte
    • Beiträge: 1.097
    Re: Datenhygiene für die DSGVO
    Antwort #7 am: 07. April 2018, 17:34:05
    Ich kann Dir die Frage fachlich leider nicht beantworten. Aber mich würde interessieren warum Du das machen möchtest?

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #8 am: 09. April 2018, 19:59:10
    Vom Prinzip der selbe Grund wie bei dir. Die Daten weitestgehend im Shop zu anonymisieren. Nur eben statt von allen Kunden/Bestellungen die Felder mit den gleichen Werten zu befüllen, diese auf den ersten Buchstaben zu reduzieren, um dann - falls ein Prüfer die Bestellungen im Shop sehen will - zumindest anhand der Initialen erkennen kann, das die Rechnung, Lieferschein, o.ä. zu der Bestellung passt.

    Vielleicht auch schöner für einen Kunden der seine Bestellhistory anschaut, wenn dann nicht aa bb aus cc steht, sondern A M aus Z (für Anton Meier aus Zwickau).

    Deine Variante würde mir evtl. auch reichen. Man könnte das Kürzen in der von mir angefragten Form auch "Luxusproblem" oder "Spielerei" nennen.  ;-) .

    hbauer

    • Experte
    • Beiträge: 1.097
    Re: Datenhygiene für die DSGVO
    Antwort #9 am: 10. April 2018, 07:37:08
    zumindest anhand der Initialen erkennen kann, das die Rechnung, Lieferschein, o.ä. zu der Bestellung passt.


    Ah, hättest Du nicht über die Bestellnummer die Beziehung schon hergestellt?


    Vielleicht auch schöner für einen Kunden der seine Bestellhistory anschaut, wenn dann nicht aa bb aus cc steht, sondern A M aus Z (für Anton Meier aus Zwickau).

    Da ich nicht so fit in SQL bin halte ich es lieber mit "weniger ist mehr" wenn ich den Befehl noch selbst verstehten kann. ;-)

    Ich denke in der heutigen Zeit kann man diese Form der Datenhygiene eher als positiven Aspekt verkaufen. Ich werde auf jeden Fall einen Hinweis in der Maske geben warum dort nur anonymisierte Daten sind .

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Datenhygiene für die DSGVO
    Antwort #10 am: 10. April 2018, 07:56:42
    Hagens ursprünglicher Vorschlag löscht Kunden die seit x Tagen nicht bestellt haben. Es kann aber sein, dass diese Kunden sich trotzdem eingeloggt haben. Nach dem Löschen haben solche Kunden kein Konto mehr. Gewollt?

    Was dann das Anonymisieren der Bestellungen angeht, wurde ich das mal mit einem Juristen/Steuerberater absprechen. Das könnte mit der Gdpdu kollidieren. Und wenn ich die DSGVO richtig im Kopf habe, dann besteht aufgrund gesetzlicer Anforderung keine Löschpflicht.

    Q

    • Fördermitglied
    • Beiträge: 1.531
    Re: Datenhygiene für die DSGVO
    Antwort #11 am: 10. April 2018, 20:41:38
    Hagens ursprünglicher Vorschlag löscht Kunden die seit x Tagen nicht bestellt haben. Es kann aber sein, dass diese Kunden sich trotzdem eingeloggt haben.

    Deswegen mein Vorschlag

    Bei den Kunden würde ich aber als Grundlage aus der Tabelle customers_info die Werte aus customers_info_date_of_last_logon oder wenn diese leer (NULL) sind customers_info_date_account_created nehmen.

    Wenn's bei mir mal zeitlich wieder etwas luftiger wird, probiere  ich etwas rum.  :hobbyhorse:

    p3e

    • Experte
    • Beiträge: 2.424
    Re: Datenhygiene für die DSGVO
    Antwort #12 am: 11. April 2018, 12:42:42
    Ist das nicht übers Ziel hinaus?
    Der Kunde muss auf Wunsch löschbar sein. Bei allen anderen Kunden gehe ich erst einmal davon aus, dass die Bewusst ein Konto bei mir angelegt haben und auch noch mal in Zukunft mit genau diesen Daten nachbestellen wollen.

    Ich finde trotzdem, dass die EU DSGVO hier erstaunlich ruhig angegangen wird.
    Würde mich interessieren, was Ihr denn sonst schon vorbereitet habt. Wir haben zB. auch viele Stammkunden, die per Telefon, Mail oder Fax (also nicht online) bestellen. Von denen Lassen wir uns momentan schriftlich bestätigen, dass die Daten zT. an Dienstleister, wie Paketdienst, Bank, Inkassodienst weitergegeben werden und bestätigen wiederum dem Kunden, dass wir vertraulich mit den Daten umgehen und uns auch von Diestleistern das schriftlich geben lassen.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Datenhygiene für die DSGVO
    Antwort #13 am: 16. April 2018, 14:03:33
    Was ist eigentlich mit den Log-Dateien? Inwieweit werden da personenbezogene Daten reingeschrieben (evtl. ja nur abhängig von einer Einstellung im Backend)?

    Muss da ggf. eine automatische Löschroutine eingebaut werden?

    bennyle

    • Neu im Forum
    • Beiträge: 16
    Re: Datenhygiene für die DSGVO
    Antwort #14 am: 05. Juni 2018, 15:17:19
    Hier mal die Variante mit Prüfung der `customers_info_date_account_created` und `customers_info_date_of_last_logon` zum Löschen der Kunden:

    Code: SQL  [Auswählen]
    SELECT DISTINCT `customers_id`, `customers_lastname` FROM `customers` WHERE `customers_id` > '1' AND `customers_id` NOT IN (SELECT DISTINCT `customers_info_id` FROM `customers_info` WHERE `customers_info_date_account_created` > DATE_SUB(CURDATE(),INTERVAL 1825 DAY) OR `customers_info_date_of_last_logon` > DATE_SUB(CURDATE(),INTERVAL 1825 DAY))
    15 Antworten
    14450 Aufrufe
    02. Mai 2018, 10:29:22 von WeXsler
    16 Antworten
    11823 Aufrufe
    15. Mai 2018, 20:05:05 von WeXsler
    8 Antworten
    6594 Aufrufe
    11. Mai 2018, 12:28:44 von p3e
    15 Antworten
    14536 Aufrufe
    28. Juni 2018, 08:46:14 von mr.mc.mauser