it-swarm.com.de

Datenverschleierung in SQL Server

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

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

Welchen Ansatz sollte gewählt werden, wenn wir dies schnell und mit einem höheren Grad an Verschleierung tun möchten? Ich denke darüber nach, wie Charaktere nach dem Vor- und Familiennamen der Leute suchen, aber wie? Sollte 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? Sollte beispielsweise das Geburtsdatum zufällig aus der gesamten Tabelle ausgewählt und einem Datensatz zugewiesen werden, oder gibt es einen besseren Weg, dies zu tun?

44
Sky

Ich wünschte, ich könnte Ihnen 100 Punkte geben, nur um darüber nachzudenken! 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 tatsächlich 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 geprüft werden sollte.

Die meisten Datenschutzgesetze drehen sich um die Fähigkeit, Daten einer Person korrekt zuzuordnen - beispielsweise einem Geburtsdatum oder einer Telefonnummer. Sie können die gesetzlichen Anforderungen erfüllen, indem Sie sicherstellen, dass Ihre Daten beim Verlassen der Produktion in UAT durcheinander gebracht werden, sodass sie nicht einfach der ursprünglichen Person zugeordnet werden können - insbesondere, wenn Sie Vor- und Nachnamen durcheinander bringen.

Dies behebt jedoch nicht das Problem, beispielsweise die Kontaktdaten. Sie können die gesetzlichen Anforderungen erfüllen, indem Sie die Daten durcheinander bringen, aber die Telefonnummern sind immer noch echt, die E-Mails sind 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, mit der zufällige Testdaten für Sie erstellt werden können, damit Sie die Felder mit neu füllen können Daten, gegen die getestet werden kann.

Was das Verwürfeln von Daten betrifft: Es gibt viele Anwendungen, die dies für Sie tun, und ehrlich gesagt haben Sie Recht, wenn Sie das Rad nicht neu erfinden möchten. Das, was wir in unserem Unternehmen verwenden, ist ein Produkt namens Data Masker von einem Unternehmen namens Net2000. Die Lizenz ist ziemlich billig, funktioniert 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-Verfahren dringend empfehlen, da dies viel flexibler ist als reines TSQL (ganz zu schweigen von Ihnen) kann TSQL nicht verwenden siehe hier ).

Sobald 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 ist Ihre beste Ressource dafür Ihr juristisches Team und/oder die Wirtschaftsprüfer des Unternehmens. 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, anstatt zu versuchen, es selbst zu tun und es falsch zu verstehen. Es ist absolut nichts Falsches daran, um Hilfe zu bitten - besonders wenn es so wichtig ist.

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

26
Mr.Brownstone

Mr. Brownstone traf den Nagel direkt auf den Kopf. Um Ihnen ein bisschen zu helfen, hier ist meine "Garble" -Funktion, mit der Zeichenfolgen verschleiert werden (lustige Ergebnisse mit Namen!). Übergeben Sie eine Zeichenfolge, es wird eine verstümmelte Zeichenfolge zurückgegeben. Fügen Sie es in Update-Anweisungen 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
10
datagod

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, führte sie durch eine Schleife, um jeden ersten bis letzten zu verbinden, fügte Sexcode hinzu und lud ihn in Großbuchstaben in eine Tabelle. Ich hatte dann eine Tabelle mit ungefähr 400 Millionen eindeutigen Namen. Ich habe Großbuchstaben verwendet, da unsere aktuellen Daten nicht in Großbuchstaben geschrieben waren, sodass ich leichter erkennen konnte, welche Daten gelöscht wurden.

Als ich meine Benutzerdaten gesäubert habe, habe ich die Namen ausgetauscht. Zum Geburtstag habe ich alle auf den 1. Januar des Jahres gesetzt, in dem sie tatsächlich geboren wurden, und alle Telefonnummern mit ihrer Postleitzahl aktualisiert (meine Daten waren nur in den USA). E-Mail-Adressen wurden zu Anfangs- und Nachnamen @ mycompany.co. Die Postanschrift hat mich am meisten betrübt, aber ich habe die Stadt, das Bundesland 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 dort, wo ich Daten dupliziert hatte, aber immer noch eine FK für den Hauptbenutzer hatte (schlechtes Design ja, aber nicht meins), habe ich diese Daten auch aktualisiert, sodass der Name für Benutzer x in der gesamten Datenbank konsistent war.

Insgesamt waren meine Daten immer noch sehr gut lesbar, obwohl die Adresse keinen Sinn ergab. Ich habe ein paar Tage gebraucht, 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.

7
user9164

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 Werkzeuge sind großartig, daher bin ich mir sicher, dass dies einen Blick wert ist.

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

Schauen Sie sich den Blog-Beitrag an, in dem dies angekündigt wird: automatisierte Datenmaskierung

0
cmcapellan

Wie wäre es mit der HASHBYTES-Funktion (in SQL 2008+), um ein einzelnes Feld zu verschleiern? Sie können Ihren Algorithmus auswählen (MD5 ist wahrscheinlich genug), vorausgesetzt, Sie salzen Ihre Daten. Stellen Sie also statt nur SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) sicher, dass Sie SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>') ausführen, und jetzt haben Sie einen Hash, der nicht einfach brutal erzwungen werden kann.

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

0
cmcapellan