Datenverschleierung in SQL Server

43

Was ist die beste Vorgehensweise für die Datenverschleierung in SQL Server?

Wir möchten maskierte Produktionsdaten in unserem UAT-System verwenden.

Wenn wir es schnell und mit einem höheren Grad an Verschleierung tun wollen, welcher Ansatz sollte gewählt werden? Ich denke über Character Scrambling nach Vornamen und Familiennamen nach, aber wie? Soll ich selbst eine Funktion erstellen oder stehen vordefinierte Funktionen zur Verfügung? Ich möchte keine Zeit damit verbringen, das Rad neu zu erfinden :)

Wie wäre es mit Datumsfeldern? Soll zum Beispiel das Geburtsdatum zufällig aus der gesamten Tabelle ausgewählt und einem Datensatz zugewiesen werden, oder gibt es eine bessere Möglichkeit, dies zu tun?

Himmel
quelle

Antworten:

25

Ich wünschte, ich könnte dir 100 Punkte geben, nur weil du darüber nachgedacht hast! Ich habe gesehen, dass dieses Thema so oft übersehen wurde, dass es nicht wahr ist - so gut gemacht. Soweit ich weiß, möchten Sie die Daten in den Feldern selbst verschlüsseln, und obwohl ich verstehe, was Sie erreichen möchten, ist dies möglicherweise nicht unbedingt erforderlich - obwohl dies von Fall zu Fall zu prüfen ist.

Bei den meisten Datenschutzgesetzen geht es um die Möglichkeit, eine Person korrekt mit Daten zu verknüpfen, z. B. mit einem Geburtsdatum oder einer Telefonnummer. Sie können die gesetzlichen Anforderungen erfüllen, indem Sie sicherstellen, dass Ihre Daten, wenn Sie sie aus der Produktion in UAT verschieben, durcheinander gebracht werden, sodass sie nicht einfach der ursprünglichen Person zugeordnet werden können - insbesondere, wenn Sie Vor- und Nachnamen durcheinander bringen.

Hiermit wird jedoch nicht das Problem der Kontaktdaten behoben. Sie können die gesetzlichen Anforderungen erfüllen, indem Sie die Daten durcheinander bringen, aber die Telefonnummern sind immer noch echt, die E-Mails immer noch echt usw. Sie sind einfach nicht der richtigen Person zugeordnet. Zu diesem Zweck empfehle ich, wenn möglich, diese Daten zu löschen, bevor sie an UAT übergeben werden. Red Gate führt eine Software namens Data Generator durch , die zufällige Testdaten für Sie erstellen kann, damit Sie die Felder erneut mit Daten füllen können, gegen die getestet werden kann.

Datenverschlüsselung: Es gibt viele Anwendungen, die dies für Sie tun, und ehrlich gesagt, möchten Sie das Rad nicht neu erfinden. Das Produkt, das wir in unserem Unternehmen verwenden, heißt Data Masker und wird von einem Unternehmen namens Net2000 angeboten. Die Lizenz ist ziemlich billig, sie arbeitet extrem schnell und Sie müssen sich keine Sorgen machen, dass Sie alle Einschränkungen deaktivieren müssen, bevor Sie die Datenbank verschlüsseln.

Sie können natürlich Ihre eigene Lösung entwickeln, wenn Sie nichts finden, das Ihren Anforderungen entspricht. Wenn Sie sich dazu entschließen, würde ich die Verwendung von CLR-Prozeduren dringend empfehlen, da diese viel flexibler sind als reines TSQL (ganz zu schweigen von Ihnen) Ich kann TSQL nicht verwenden (siehe hier ).

Nachdem Sie eine Anwendung ausgewählt haben, die dies für Sie ausführt, müssen Sie als Nächstes entscheiden, was Sie tatsächlich verschlüsseln möchten / müssen. Ehrlich gesagt, Ihre beste Ressource dafür ist Ihr juristisches Team und / oder die Wirtschaftsprüfer. Ich weiß, dass wir manchmal nicht gerne mit ihnen arbeiten, aber sie sind viel netter für Sie, wenn Sie sich ihnen nähern und ihnen die Frage stellen, als wenn Sie versuchen, es selbst zu tun und es falsch zu verstehen. Es ist absolut nichts Falsches, wenn Sie um Hilfe bitten - vor allem, wenn es so wichtig ist.

Ich hoffe das hilft dir und wünsche dir viel Glück bei deiner Suche ... ;-)

Herr Brownstone
quelle
1
Wenn ich könnte, würde ich ein zusätzliches Plus für die Erwähnung der Unternehmensrichtlinien geben.
Dezso
Die gesetzlichen Anforderungen werden von den Stakeholdern festgelegt. Ich sollte es jetzt implementieren.
Sky
Herr Bownstone, Ihre Erklärung ist wie immer hervorragend. Danke. Ich werde die CLR-Funktion daraufhin überprüfen und auch T-SQL im Auge behalten. Sehen Sie, welche besser passt und schneller zu bauen ist.
Sky
10

Mr. Brownstone traf den Nagel direkt auf den Kopf. Um Ihnen ein bisschen zu helfen, hier ist meine "Garble" -Funktion, die zum Verschleiern von Zeichenfolgen verwendet wird (lustige Ergebnisse mit Namen!). Wenn Sie eine Zeichenfolge übergeben, wird eine verstümmelte Zeichenfolge zurückgegeben. Schließen Sie es in Aktualisierungsanweisungen für Zeichenfolgenspalten ein. Ändern Sie die Datenlänge nach Belieben.

---------------------
-- Garble Function --
---------------------
-- Make a function to slightly garble the strings
IF (object_id('fn_Garble') is not null)
  drop function fn_Garble
go
create function fn_Garble
(
  @String varchar(255)
)  
returns varchar(255)
as
BEGIN
  select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
  return @String
END
go
datagod
quelle
3
Kommt mir bekannt vor? (Nur eine Illustration Ihres Standpunkts.) Von einem SQL Server zu einem Eppowo Konotho. a om phe presathenp ef Meprepelas threomwore onth kekang Waph SQL. Wir bevorzugen Thopobose Kensilponps Pe Voraeis Piblak Onth Pravope Sekper Ergonazopaens. Weitere Informationen zu SQL Server Mogozane finden Sie in der Peripherie des p-SQL 101-Pakets / e-bek. Ein Hove unter SQL Server, der beide Thoys von SQL 4.2 unterstützt.
Dezso
1
heh ... es hat eine Weile gedauert, bis ich es erkannt habe. Es scheint eine Menge nicht verstümmelter Wörter zu geben. Ich habe es immer nur gegen Vornamen, Nachnamen, Städtenamen verwendet. Nur eine dumme kleine Funktion. Ich würde meine Karriere nicht darauf setzen.
datagod
Ich schätze den Ansatz - einfach gehalten, aber funktionierend. Und ein Plus ist, dass der Text noch lesbar ist. Ich konnte es aber nicht verstehen :)
Dezso
7

Ich musste dies für die Verkaufsdaten meiner Kunden tun. Für Namen ging ich zur Volkszählung und lud alle Vor- und Nachnamen herunter, durchlief eine Schleife, um jeden Vor- und Nachnamen zu verknüpfen, fügte Sexcode hinzu und lud ihn in Großbuchstaben in eine Tabelle. Ich hatte dann einen Tisch mit ungefähr 400 Millionen eindeutigen Namen. Ich habe Großbuchstaben verwendet, da unsere aktuellen Daten nicht in Großbuchstaben angegeben wurden, damit ich leichter erkennen kann, welche Daten gelöscht wurden.

Als ich meine Benutzerdaten gelöscht habe, habe ich die Namen ausgetauscht, zum Geburtstag habe ich alle zum 1. Januar des Jahres, in dem sie tatsächlich geboren wurden, versetzt und Telefonnummern mit ihrer Postleitzahl aktualisiert (meine Daten waren nur in den USA). Aus E-Mail-Adressen wurden die Anfangsbuchstaben plus der Nachname @ mycompany.co. Die Postanschrift hat mich am meisten gekränkt, aber ich habe die Stadt, den Bundesstaat und die Postleitzahl behalten, weil ich glaube, dass sie kein Problem darstellen, wenn die Adresse geändert wird. Ich hatte einen Kollegen, der ein Programm hatte, das verstümmelte Buchstaben erzeugte und die Adresszeile damit aktualisierte.

Überall, wo ich Daten dupliziert hatte, dem Hauptbenutzer aber immer noch eine FK (schlechtes Design ja, aber nicht meins), habe ich diese Daten ebenfalls aktualisiert, sodass der Name für Benutzer x in der Datenbank konsistent war.

Insgesamt waren meine Daten noch gut lesbar, obwohl die Adresse keinen Sinn ergab. Ich brauchte ein paar Tage, um all das zum Laufen zu bringen, aber sobald es fertig war und ein SQL Agent-Job erstellt wurde, konnte ich die Daten in nur 15 Minuten bereinigen.

user9164
quelle
Ich mag deine Herangehensweise. In Bezug auf Vor- und Nachnamen denke ich, wenn der Datensatz groß genug ist, können wir ihn mit einem guten Variationsgrad als Quelle verwenden, anstatt Namen von der Zensus-Website herunterladen zu müssen. Wenn wir die Daten mit SELECT DISTICT abfragen, sehen wir viele einzigartige Werte, mit denen wir spielen müssen.
Sky
0

Wie wäre es mit der Verwendung der HASHBYTES-Funktion (in SQL 2008+), um ein einzelnes Feld zu verschleiern? Sie können Ihren Algorithmus auswählen (MD5 ist wahrscheinlich ausreichend), sofern Sie Ihre Daten salzen. Anstatt also nur SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) sicherzugehen, dass Sie dies tun SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>'), haben Sie jetzt einen Hash, der nicht einfach brutal erzwungen werden kann.

Es ist eine tatsächliche Funktion, die unterstützt, wiederholt und wahrscheinlich viel schneller ist. Je nachdem, wie viel Sie wirklich sichern müssen, anstatt nur zu verschleiern, können Sie auch einen schwächeren, schnelleren Hash verwenden.

cmcapellan
quelle
Sie sollten MD5 heutzutage nicht mehr verwenden, es ist von Natur aus unsicher.
Philᵀᴹ
OK ... bei HASHBYTES haben Sie die Wahl: MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 Für jeden ist etwas dabei !! (Einschließlich, ja, diejenigen, die Sie nicht verwenden sollten). Nehmen wir also an, wir verwenden SHA2_512 ... gibt es sonst noch Probleme mit diesem Ansatz?
Cmcapellan
-1

Schauen Sie sich das PowerShell-Modul von dbatools an, um eine kostenlose Option für die statische Datenmaskierung zu erhalten, die von Chrissy Lemaire (@ chrissy-lemaire) und ihrem Team geschrieben wurde. Alle ihre Tools sind großartig, daher bin ich mir sicher, dass dies einen Blick wert ist.

Die beiden Befehle, die in dbatools nachgeschlagen werden müssen, lauten: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

Schauen Sie sich den Blog-Beitrag an, der dies ankündigt: Automatisierte Datenmaskierung

cmcapellan
quelle
2
Nur-Link-Antworten sind nicht sehr hilfreich. Sie können Ihre Antwort verbessern, indem Sie Beispiele für die Verwendung der Cmdlets usw. angeben.
Erik Darling