Ich suche nach einer selbstgewählten Methode, Produktionsdaten für die Entwicklung und den Test zu verschlüsseln. Ich habe ein paar Skripte gebaut, die zufällige Sozialversicherungsnummern machen, Geburtsdaten verschieben, E-Mails verschlüsseln, usw. Aber ich bin gegen eine Wand gestoßen, um Kundennamen zu verschlüsseln. Ich möchte echte Namen behalten, damit wir immer noch verwenden oder suchen können, damit die zufällige Buchstabengenerierung aus ist. Was ich bisher versucht habe, ist, eine temporäre Tabelle aller letzten Namen in der Tabelle zu erstellen und dann die Kundentabelle mit einer zufälligen Auswahl aus der temporären Tabelle zu aktualisieren. So:
%Vor%Das hat im Test gut funktioniert, aber es ist völlig unmöglich, mit größeren Datenmengen zu arbeiten (& gt; 20 Minuten für 40.000 Zeilen)
All das zu fragen, wie würden Sie Kundennamen verschlüsseln, während Sie echte Namen und das Gewicht der Produktionsdaten behalten?
UPDATE: Scheitert nie, Sie versuchen alle Informationen in den Post zu schreiben, und Sie vergessen etwas Wichtiges. Diese Daten werden auch in unseren Sales & amp; Demo-Umgebungen, die öffentlich verfügbar sind. Einige der Antworten sind, was ich versuche zu tun, die Namen zu "wechseln", aber meine Frage ist buchstäblich, wie man in T-SQL kodiert?
Ich verwende generierte Daten . Es ist ein Open-Source-PHP-Skript, das alle Arten von Dummy-Daten generieren kann.
Eine sehr einfache Lösung wäre ROT13 der Text.
Eine bessere Frage könnte sein, warum Sie das Bedürfnis haben, die Daten zu verschlüsseln? Wenn Sie über einen Verschlüsselungsschlüssel verfügen, können Sie den Text auch über DES oder AES oder ähnliches ausführen. Dies hätte jedoch potenzielle Leistungsprobleme.
Wenn ich so etwas mache, schreibe ich normalerweise ein kleines Programm, das zuerst viele Namen und Nachnamen in zwei Arrays lädt und dann einfach die Datenbank aktualisiert, indem ich einen zufälligen Namen aus Arrays verwende. Es funktioniert sehr schnell sogar für sehr große Datensätze (über 200.000 Datensätze)
Ich arbeite gerade in meiner Firma daran - und es stellt sich heraus, dass es eine sehr schwierige Sache ist. Sie möchten Namen haben, die realistisch sind, aber keine wirklichen persönlichen Informationen preisgeben sollen.
Mein Ansatz bestand darin, zunächst eine zufällige "Zuordnung" von Nachnamen zu anderen Nachnamen zu erstellen und dann diese Zuordnung zu verwenden, um alle Nachnamen zu ändern. Dies ist nützlich, wenn Sie doppelte Namenseinträge haben. Angenommen, Sie haben 2 "John Smith" -Datensätze, die beide die gleiche reale Person darstellen. Wenn Sie einen Datensatz zu "John Adams" und den anderen zu "John Best" geändert haben, dann hat Ihre eine "Person" nun zwei verschiedene Namen! Bei einem Mapping werden alle Vorkommen von "Smith" in "Jones" geändert, sodass Duplikate (oder sogar Familienmitglieder) immer noch mit demselben Nachnamen enden, wodurch die Daten "realistischer" gehalten werden.
Ich muss auch die Adressen, Telefonnummern, Bankkontonummern usw. verschlüsseln, und ich bin mir nicht sicher, wie ich mich ihnen nähern werde. Die Daten beim Scrambling "realistisch" zu halten, ist sicherlich ein tiefes Thema. Das muss viele Unternehmen schon oft gemacht haben - wer hat das schon mal gemacht? Was hast du gelernt?
Verwenden Sie stattdessen eine temporäre Tabelle und die Abfrage ist sehr schnell. Ich lief in 4 Sekunden auf 60K-Reihen. Ich werde dieses hier verwenden.
%Vor%/ * Verschlüsseln Sie die Nachnamen (wählen Sie zufällig einen anderen Nachnamen) * /
%Vor%Der folgende Ansatz hat für uns funktioniert, sagen wir, wir haben 2 Tabellen Kunden und Produkte:
%Vor%Die obige Funktion hilft bei der Erzeugung verschiedener Daten basierend auf dem eingehenden Datentyp.
Verwenden Sie jetzt für jede Spalte jeder Tabelle, die kein Wort "id" enthält, die folgende Abfrage, um weitere Abfragen zu generieren, um die Daten zu bearbeiten:
%Vor%Wenn Sie die obige Abfrage ausführen, generiert sie Aktualisierungsabfragen für jede Tabelle und für jede Spalte dieser Tabelle, zum Beispiel:
%Vor%Wenn Sie nun obige Abfragen ausführen, erhalten Sie letzte Aktualisierungsabfragen, die die Daten Ihrer Tabellen aktualisieren.
Sie können dies in jeder SQL Server-Datenbank ausführen, egal wie viele Tabellen Sie haben, es generiert Abfragen für Sie, die weiter ausgeführt werden können.
Hoffe, das hilft.
Ehrlich gesagt bin ich nicht sicher, warum das nötig ist. Ihre Entwicklungs- / Testumgebungen sollten sich hinter Ihrer Firewall befinden und nicht über das Internet zugänglich sein.
Ihren Entwicklern sollte vertraut werden, und Sie haben rechtliche Schritte gegen sie, wenn sie Ihrem Vertrauen nicht gerecht werden.
Ich denke, die wirkliche Frage sollte lauten: "Soll ich die Daten verschlüsseln?", und die Antwort ist (in meinen Augen) "Nein".
Wenn Sie es aus irgendeinem Grund aus der Ferne senden oder wenn Sie Ihre Umgebungen über das Internet zugänglich machen müssen, oder wenn Sie paranoid sind, würde ich einen zufälligen Schalter implementieren. Anstatt eine temporäre Tabelle zu erstellen, wechseln Sie zwischen den einzelnen Speicherorten und einer zufälligen Zeile in der Tabelle und tauschen jeweils ein Datenelement aus.
Das Endergebnis wird eine Tabelle mit den gleichen Daten sein, aber mit einer zufälligen Reorganisation. Es sollte auch schneller sein als Ihre temporäre Tabelle, glaube ich.
Es sollte einfach genug sein, das Fisher-Yates Shuffle in SQL zu implementieren ... oder zumindest in eine Konsolenanwendung, die die Datenbank liest und in das Ziel schreibt.
Edit (2): Antwort aus der Hand in T-SQL:
deklariere @name varchar (50) set @name = (SELECT lastName von der Person mit personID = (zufällige ID-Nummer) Person aktualisieren setze lastname = @name WHERE personID = (Personen-ID der aktuellen Zeile)
Wickeln Sie dies in eine Schleife und befolgen Sie die Richtlinien von Fisher-Yates zum Ändern der Random-Value-Einschränkungen, und Sie werden festgelegt.
Tags und Links sql sql-server tsql privacy scramble