CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Anonymisierung von Datenmodellen mithilfe von redgate SQL Data Generator

Der Blogbeitrag „Anonymisierung von kundenspezifischen Daten für DeltaMaster-Anwendungen“ (http://crew.bissantz.de/anonymisierung-von-kundenspezifischen-daten) hat bereits Stellen in DeltaMaster Modeler, der Datenbank und in der Analysesitzung beschrieben, die es bei der Anonymisierung von Datenmodellen zu beachten gilt. Die Bewegungsdaten werden mithilfe eines Zufallsfaktors verfälscht, ohne dabei den Zusammenhang zu verlieren.
In diesem Blogbeitrag lernen wir die Möglichkeit kennen, Tabellen zu befüllen und zu anonymisieren: mit SQL Data Generator von redgate. Dabei werden Fremdschlüssel beachtet und Tabellen in Abhängigkeit voneinander geändert. Bei unseren Datenmodellen bewirkt dies, dass Faktentabellen entsprechend der Stammdaten geändert werden.

Anmeldung an die relationale Datenbank

Starten können Sie den SQL Data Generator direkt im SQL Server Management Studio unter Extras. Dann öffnet sich der Anmeldedialog Project Configuration im Reiter Database, in dem Sie die Informationen zum Server, dem zugehörigen Anmeldeverfahren und zur Datenbank eintragen, deren Tabellen anonymisiert werden sollen.

Anmeldedialog des SQL Data Generator im Reiter Database
Abb. 1: Anmeldedialog des SQL Data Generator im Reiter Database

In den Reitern Scripts und Options können weitere Einstellungen vorgenommen werden. Hier kann man die Standardeinstellungen verwenden.

Reiter Scripts
Abb. 2: Reiter Scripts

Reiter OptionsAbb. 3: Reiter Options

Selektion der Tabellen

Nach Abschluss der Konfigurationseinstellungen werden alle Tabellen der Datenbank im linken Fenster aufgelistet. Das „+“ links vom Tabellennamen öffnet die Liste der zugehörigen Tabellenspalten. Im Fenster rechts unten erscheint nach Markierung der Tabelle eine Vorschau der anonymisierten Daten.
Im Anmeldedialog im Reiter Options wurde die Überprüfung von Abhängigkeiten durch die standardmäßig aktivierte Funktion Enforce check constraints bereits festgelegt. Da DeltaMaster Modeler die Schlüssel setzt, um Faktentabellen mit den darin verwendeten Dimensionen zu verknüpfen und auf Fehler zu überprüfen, erscheint an dieser Stelle ein Hinweis, wenn nur die Dimensionstabelle und nicht die Faktentabelle ausgewählt wird.

Warnung bei SchlüsselverletzungenAbb. 4: Warnung bei Schlüsselverletzungen

Bearbeitung der Stammdaten

Nun möchten wir die Dimensionstabelle für die Kunden überarbeiten. Dazu markiert man die Tabelle, um die einzelnen Spalten zu ändern. Für jede Spalte werden Einträge je nach Datentyp vorgeschlagen. In unserem Fall möchte man die Namen und die zugehörigen Kundennummern anonymisieren. Die anderen Spalten behalten wir bei, da diese keine kritischen Bezeichnungen haben. Die Einträge der vorhandenen Tabelle sollen zunächst vollständig übernommen werden. Dazu greift man auf eine Quelltabelle zu. Da die anonymisierte Datenbank separat zur produktiven Datenbank läuft, kann die Zieltabelle T_DIM_05_04_Kunde der Datenbank Chair_Anonymisiert auf die Quelltabelle T_DIM_05_04_Kunde der Datenbank Chair verweisen.

Einträge aus einer bestehenden Quelltabelle übernehmenAbb. 5: Einträge aus einer bestehenden Quelltabelle übernehmen

Im Anschluss sind alle Einträge aus der Quelltabelle in die Zieltabelle übernommen. Möchte man nun einzelne Spalten verändern (wie in unserem Beispiel Name und Kundennummer), werden diese nachträglich bearbeitet. Dazu markiert man die einzelnen Spalten links in der Auswahlliste, z. B. Kunde_ES. Im rechten oberen Fenster erscheinen neben Generator die verschiedenen Möglichkeiten die Daten zu verändern.

Auswahl für die Einträge je SpalteAbb. 6: Auswahl für die Einträge je Spalte

Dabei werden die Einträge erkannt und je nach Datentyp passende Optionen dafür aufgelistet. Möchte man bei Bezeichnungen oder Namen selbst erstellte Daten eintragen, muss eine Liste in Form einer Textdatei angelegt werden, die dann als Quelle für diese Spalte definiert wird. In der folgenden Abbildung werden die Kundennamen aus einer selbst definierten Textdatei befüllt.

Kundennamen aus einer selbst definierten TextdateiAbb. 7: Kundennamen aus einer selbst definierten Textdatei

Bearbeitung der Bewegungsdaten

Nachdem in den Stammdaten die Einträge überarbeitet wurden, möchten wir auch die Bewegungsdaten ändern. Die Abhängigkeiten zwischen T_DIM- und T_FACT-Tabellen wurden bereits erkannt und beim Aufruf dieser Tabelle als Schlüssel in den Dimensionsspalten dargestellt.

Fremdschlüsselbeziehungen zwischen Dimensions- und FaktentabellenAbb. 8: Fremdschlüsselbeziehungen zwischen Dimensions- und Faktentabellen

Bei den Werten werden wieder die Datentypen erkannt und vorhandene Werte ersetzt. Möchte man vorerst die Zahlen aus der ursprünglichen Tabelle beibehalten, so verknüpft man die Zieltabelle T_FACT_01_Deckungsbeitragsrechnung aus der Datenbank Chair_Anonymisiert mit der Quelltabelle T_FACT_01_Deckungsbeitragsrechnung aus der Datenbank Chair. Die Werte können anschließend per Zufallsprinzip je Spalte geändert werden. Dafür können Minimal- und Maximalwerte eingegeben werden, um eine bestimmte Spanne einzuhalten.

Aktualisierung der ZahlenAbb. 9: Aktualisierung der Zahlen

Erstellung der neuen Datensätze

Wurden die Tabellen überarbeitet, zeigt eine Übersicht an, auf welchem Server und welcher Datenbank welche Tabellen geändert werden. Die Schaltfläche Generate Data erstellt die neuen Datensätze.

Überblick über die zu ändernden TabellenAbb. 10: Überblick über die zu ändernden Tabellen

Datensätze erstellenAbb. 11: Datensätze erstellen

Nach Erstellung der Datensätze öffnet sich automatisch ein Statusbericht, der die Zeilenanzahl der betroffenen Tabellen anzeigt. Sollte es zu Fehlern kommen, z. B. wegen Schlüsselverletzungen, so werden hier auch die Fehlermeldungen aufgelistet.

StatusberichtAbb. 12: Statusbericht

Wirft man einen Blick in die Tabellen im SQL Server Management Studio, sieht man, dass die Kunden andere Namen haben, und in der Faktentabelle erscheinen die geänderten Kundennummern.
SQL Data Generator bietet uns eine sehr schnelle und einfache Möglichkeit Daten zu anonymisieren, ohne dabei alle Änderungen der Stammdaten in den Bewegungsdaten manuell nachziehen zu müssen. Einziger Nachteil ist, dass bei den Kennzahlen die Zufallszahlen je Spalte gebildet werden. So geht ein möglicher Zusammenhang zwischen den Kennzahlen verloren. Um dies zu umgehen, könnte man zuerst die Prozedur aus dem Blogbeitrag „Für Präsentationszwecke: Daten kräftig durchmischen“ (http://crew.bissantz.de/updatetablewithrandomfactor) auf der Faktentabelle ausführen und anschließend die Zahlen aus der Tabelle ohne Änderung übernehmen.
Alle Einstellungen zu den Änderungen werden als Projekt gespeichert und können nach Bedarf jederzeit wieder ausgeführt werden.