Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server: Sicherheit für Entwickler

Dynamic Data Masking

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit Dynamic Data Masking stellt SQL Server 2016 eine Möglichkeit bereit, sensible Daten für Anwender, die nicht über das neue Recht UNMASK verfügen, zu maskieren. Korrektes Filtern und Sortieren ist dennoch möglich.
10:50

Transkript

Dynamic Data Masking gibt mir die Möglichkeit sensible Daten automatisch zu maskieren, abhängig davon, ob der Benutzer über ein spezielles Recht, das UNMASK-Recht verfügt oder nicht. Wenn er über dieses Recht verfügt, werden die Daten ganz normal zugegeben, ohne vorher maskiert zu werden. Wenn er entsprechend dieses Recht nicht hat, dann werden die Datenvorrücker aber entsprechend maskiert. Und das hat den Vorteil, dass zum Beispiel Sortierung und Filter nach wie vor einwandfrei funktionieren, das wäre bei eigenen Lösungen möglicherweise nicht immer der Fall, je nachdem wann er die Maskierung stattfindet. Das Ergebnis kann unter anderem so aussehen: Ich habe hier mehrere Spalten, die maskiert sind, zum Beispiel die Name-Spalte ist maskiert, da sehe ich nur den ersten Buchstaben des Vornamens und die letzten Beiden des Nachnamens. Das Gehalt ist maskiert, ich habe hier entsprechend nur überall eine 0 stehen, egal wie viel der tatsächliche Wert ist. Telefonnummer ist komplett mit X-en ausgefüllt, während die E-Mail-Adressen zu mindestens noch erkennen lässt, dass es sich um eine E-Mail-Adresse handelt. Und das ist das, was der Benutzer in der Tat dann angezeigt bekommt, auch in einer Anwendung. Leider ist es aktuell noch möglich, dass ich Updates mache auf diese Tabelle, das ist durchaus vielleicht auch gewünscht, leider kann ich aber noch unmaskierte Kopien anlegen, das ist leider nicht wirklich gewünscht, denke ich mir, anders kann ich mir das nicht vorstellen, und das wird sich wahrscheinlich zum Release Candidate noch ändern. Ich zeige Ihnen mal, wie das Ganze funktioniert. Wir wechseln dafür in das SQL Server Management Studio. So, hier im SQL Server Management Studio habe ich die Datei Dynamic Data Masking.sql geöffnet. Hier sind alle Schritte drin für das Demo, damit können Sie das auch zu Hause bei sich nachvollziehen. Zunächst einmal lege ich eine Datenbank an. Das funktioniert erfreulicherweise sehr gut. Dann lege ich eine entsprechende Tabelle an, von der ich möchte, dass die einzelnen Spalten dynamisch maskiert werden. Und Sie sehen hier die neue Syntax MASKED WITH, danach kann ich eine Funktion angeben, hier gibt es vier Möglichkeiten, aus denen ich wählen kann, und die einzelnen Spalten werden gemäß der Funktion, die Sie hier angeben, maskiert. Sie können keine eigenen Funktionen, Sie können quasi nur aus einem Portfolio bestehender Funktionen auswählen. Zumal können Sie sagen partial, Partial bekommt drei Parameter. Der erste sagt, wie viel Zeichen am Anfang angezeigt werden sollen, der letzte zeigt, wie viel Zeichen am Ende angezeigt werden sollen. Und dazwischen die Zeichenkette sagt, womit der Rest ausgefüllt wird. Das ist also eine Maske, die nur funktioniert für Zeichenketten. Dann kann ich hingehen und zum Beispiel ein random-Funktion verwenden. Die Random-Funktion liefert mir statt des tatsächlichen Wertes eine Zahl, in dem Bereich zwischen dem ersten und zweiten Parameter. Allerdings ist es so, dass der Wert immer der Gleiche ist, das heißt, wenn ich mehrfach die Daten abrufe, bekomme ich immer den gleichen zufälligen Wert angezeigt, und er ist frei, zufällig, also nicht zwei Aufrufe zu unterschiedliche Zahlen, sondern immer die gleichen Werte an der Stelle. Dann kann ich sagen, ich möchte default haben, und Default richtet sich so ein bisschen nach dem, was ich in der Tat als Datentyp habe, also zum Beispiel 0 für Zahlen, für Strings irgendwelche Art und Weise bekomme ich dann nur X-e angezeigt und so weiter und so fort. Das heißt, damit kann ich mich so ein bisschen auf die Wahl des SQL Servers verlassen. Und ich habe last but not least die Möglichkeit zu sagen, das soll eine E-Mail sein, und dann wird das so ausmaskiert, dass entsprechend nur das erste Zeichen zu sehen ist, dann kommen einige X, dann kommt @ und so weiter und so fort, und dann .com hinten dran nochmal, egal was für eine Domäne in der Tat wirklich verwendet wird, Ich lege also diese Tabelle dann an, indem ich das Skript hier ausführe, und füge einige Werte hinzu. Na ja, und wenn ich jetzt eine erste Abfrage mache, dann bekomme ich natürlich die Originaldaten, das ist wahrscheinlich nicht weiter verwunderlich. Ich lege eine zweite Tabelle zum Vergleich an, die sieht eigentlich so aus wie die Erste, nur mit dem Unterschied, dass ich hier keine Maskierung verwende und hier oben keine Identity-Spalte habe. Ich möchte die später mal haben, um den Inhalt in diese Tabelle kopieren zu können. Dann gebe ich eine Reihe von Rechten, und zwar lege ich erstmal zwei User, an denen ich diese Rechte überhaupt geben kann, einmal UserOhne- und einmal UserMitUNMASK-Recht, das ist das neue Recht, um Daten unmaskiert sehen zu dürfen. Und beide User bekommen erst einmal so etwas wie SELECT, DELETE und UPDATE, damit ich auch irgendetwas mit den Tabellen machen kann. Das Gleiche auch für die Vergleichstabelle, hier ist es zusätzlich noch das INSERT-Recht, dann gebe ich beiden das Recht SHOWPLAN, und SHOWPLAN kann ich den Ausführungsplan mir angucken, das kann später ganz interessant sein, deshalb mache ich das mal, und nur dem User mit dem Namen UserMitUNMASK gebe ich zusätzlich noch das Recht UNMASK. Und dieses Recht steuert dann hinterher, ob die Daten in der Tat maskiert oder unmaskiert angezeigt werden können. So, nachdem die Rechte vergeben sind, gehe ich einfach mal hin und führe Teile des Skriptes aus, zunächst erstmal mit dem UNMASK-Recht, das heißt, ich wechsle hier den Benutzerkontext des Benutzers, zeige hier an, in welchen Kontext ich gerade bin, damit ich so ein bisschen Orientierung habe, und gebe entsprechend die Daten aus, und das Ergebnis sieht genauso aus wie vorhin. Die Daten werden erstmal hier unten, ich schiebe das ein bisschen nach oben, entsprechend hier unmaskiert angezeigt, und das ist auch korrekt so. Wenn ich ein User habe, der entsprechend nicht über dieses Recht verfügt, dann sieht die Sache ein bisschen anders aus. Ich mache mal Folgendes: Ich wechsle mal in den Benutzerkontext rein, indem ich nur diese beiden Zeilen ausführe und gebe einfach mal simpel die Daten aus, und Sie sehen, jetzt sind sie an der Stelle maskiert. Trotzdem aber funktioniert zum Beispiel der Filter, es kommt genau eine Zeile, und auch die Sortierung funktioniert korrekt, da das stattfindet, bevor die Maskierung vom SQL Server angewandt wird. Ich kann auch rechnen, nur das funktioniert nicht wirklich, Sie sehen es kommt trotzdem immer der Wert 0 raus. Auch das liegt daran, dass die Maskierung schlicht zum Schluss durchgeführt wird, das heißt, die Berechnung wird zwar korrekt ausgeführt, aber das Ergebnis wird dann wegmaskiert an der Stelle. So, weiter geht es mit unseren Tests. Ich kann zum Beispiel mal versuchen, ob ich ein Update durchführen kann für den Benutzer, der entsprechend keine Rechte hat, die Daten unmaskiert zu sehen. Und in der Tat, es funktioniert. Ich habe jetzt hier eine Datenänderung gemacht, ich kann sie mir zwar letztendlich nicht mehr anschauen so recht, aber zu mindestens sehe ich, dass Bugs Bunny nur noch von dem Bugs dem Vornamen der erste Buchstabe zu sehen ist. Also das funktioniert ohne weiteres, ist vielleicht nicht ganz so geschickt, aber letztendlich wahrscheinlich einfach nur konsequent, weil schließlich das Recht Daten zu ändern auf einem ganz anderen Blatt steht. So, dann kann ich im Wesentlichen zum Beispiel mal ausprobieren, wie es denn ausschaut, wenn ich die Daten von meiner Tabelle mit der Maskierung in eine andere Tabelle kopiere. Ich mache das hier, indem ich wieder in dem Benutzerkontext des Users OhneUNMASK-Recht wechsle. Ich lösche zuerst meine Referenztabelle, die ich hatte, zum Vergleich also meine MitarbeiterOhneDDM und füge dann die Daten ein, und mache das Gleiche noch mal, indem ich die Daten quasi aus der Mitarbeiter-Tabelle in eine temporäre Tabelle kopiere und dann gucke ich mir mal an, wie der Inhalt dieser drei Tabellen denn wirklich ist. Ich fülle das mal so im Batch aus, ziehe das mal hoch, die Originaltabelle ist natürlich nach wie vor entsprechend maskiert, da hat sich nichts geändert, aber sowohl die persistente Tabelle als auch die temporäre Tabelle sind beide mit den Originaldaten zu sehen. Das wird, so würde ich zumindest vermuten, nicht mehr im Release Candidate sein, weil das sicherlich ein riesen Sicherheitsloch wäre. Man könnte ohne weiteres die Maskierung umgehen, indem man sich einfach schön eine private Kopie der Tabelle anlegt. Fein, aber wahrscheinlich nicht im Sinne des Erfinders. So, was ich Ihnen noch zeigen kann, ist zum Beispiel wie das Ganze so ein bisschen under-the-hood funktioniert. Ich schalte dafür den tatsächlichen Ausführungsplan an, hier oben mit dieser Schaltfläche, und führe das Ganze noch einmal aus mit dem Benutzer OhneUNMASK-Recht. Erst nur diese beiden Zeilen und dann ein SELECT sowohl auf die Tabelle mit den maskierten Spalten, als auch ein SELECT auf die Tabelle ohne die maskierten Spalten. Ich ziehe das ein bisschen hoch und gehe jetzt hier auf Execution Plan, und Sie sehen, der Unterschied fällt sofort ins Auge, auch wenn ich hier ein bisschen mit der Auflösung kämpfe. Bei der Maskierung gibt es diesen zusätzlichen Schritt an der Stelle noch, der entsprechend dafür zuständig ist, zu prüfen, hat der Benutzer das Recht, wenn nicht, dann maskiere die entsprechenden Spalten. Dieser Schritt entfällt hier unten bei dem Zugriff auf der Tabelle, die keine Maskierung hat, das heißt, das ist wirklich dann der Punkt an der Stelle, wo wirklich die Maskierung angewandt wird, zu mindestens wenn ich eine Reihe SELECT-Statements habe, ohne dass ich ein INSERT da hinten stehen habe. Ich kann zum Beispiel hingehen, hier noch mal ein DELETE durchführen, interessiert mich der Ausführungsplan nicht und ich kann hier noch einmal ein INSERT auf die Tabelle, als Quelle verwende ich hier entsprechend dann das SELECT auf die Mitarbeiter-Tabelle, führe das aus, und hier ist dieser Schritt plötzlich nicht mehr vorhanden. Das heißt, ich vermute mal, wie gesagt, das wird im Release Candidate anders sein, weil eigentlich müsste er streng gesehen, bevor er das wirklich einfügt natürlich, auch ausfiltern, damit dieses Sicherheitsloch geschlossen ist. Hier passiert es noch nicht, aber die Zukunft wird zeigen, ob Microsoft das einbauen wird. Speziell für Dynamic Data Masking gibt es auch eine neue Sicht, die Sie benutzen können, um abzufragen, welche Spalten in einer Datenbank tatsächlich maskiert sind oder nicht. Das ist entsprechend diese Abfrage hier, die geht unter anderem auf sys.masked_colums, das gab es vorher nicht, macht ein JOIN mit sys.tables und das Ergebnis sieht so aus, ich ziehe das mal ein bisschen hoch, er zeigt mir also hier an, welche Spalte aus welcher Tabelle wie maskiert sind. So, das war es dann zum Thema Dynamic Data Masking. Ich hoffe Sie konnten nachvollziehen, was dieses neue Feature bietet und können vielleicht auch schon die ein oder andere Einsatzsituation für sich erkennen, auf jeden Fall eine spannende Sache, erhöht die Situation des SQL Servers durchaus an den ein oder anderen Stellen und damit habe ich die Möglichkeit, gerade im Reporting-Bereich sicherzustellen, dass sensible Daten nicht ohne weiteres anderen Benutzern oder Benutzern ohne die entsprechende Rechte zurechtgemacht werden. Ein bisschen schade ist, dass es nur ein UNMASK-Recht gibt momentan, sodass Sie quasi entweder alle Tabellen unmaskiert sehen können oder entsprechend keine Tabelle unmaskiert sehen. Das ist momentan noch ein Punkt, der so ein bisschen offen ist. Mal schauen, wie Microsoft darauf reagieren wird.

SQL Server: Sicherheit für Entwickler

Lernen Sie, wie sich das Thema Sicherheit im Entickleralltag mit Microsofts Datenbankserver umsetzen lässt.

2 Std. 31 min (25 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Exklusiv für Abo-Kunden
Erscheinungsdatum:15.01.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!