SQL Server: Sicherheit für Entwickler

Symmetrische Schlüssel

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Symmetrische Schlüssel können, in Verbindung mit ggf. sogar selbst signierten Zertifikaten, dazu verwendet werden, Inhalte zu ver- und entschlüsseln. Dieses Beispiel zeigt, wie das gemacht werden kann und worauf zu achten ist.
06:32

Transkript

Stürzen wir uns also direkt ins SQL Server Management Studio. Ich habe hier die Datei SymetricEncryptData.sql geöffnet und zeige Ihnen mal, wie das am praktischen Beispiel funktioniert, wie ich mit einem symmetrischen Schlüssel Daten verschlüsseln kann. Ich lege zunächst eine Datenbank an, wechsle dann aber in die Master-Datenbank, um Ihnen zu zeigen, welche symmetrischen Schlüssel Sie bereits in Ihrer Datenbank haben. Und Sie sehe schon, Sie haben einen ServiceMasterKey hier. Das heißt, das ist schon eine Art von Schlüssel, die dem SQL Server selber zugewiesen ist und den Sie möglicherweise für diverse Zwecke nutzen können. Hier einfach nur die Information: Sie sind nicht der einzige, der symmetrische Schlüssel in irgendeiner Form benutzt. Der SQL Server verwendet es selber, unter anderem um auch Backups sichern beziehungsweise verschlüsseln zu können. Dann wechsle ich wieder in meine Datenbank zurück und erzeuge in dieser neu erstellten Datenbank einen Master Key und der ist entsprechend mit einem Schlüssel versehen, nämlich einem Passwort, das Geheim$123A heißt. Das heißt, ich kann den anlegen und ich kann einen selbstsigniertes Zertifikat erstellen, das heißt, ich erstelle selber ein Zertifikat, von dem ich selber glaube, dass es vertrauenswürdig ist. Ich kann es, wie gesagt, auch mit einem eingekauften Zertifikat tun, hier an der Stelle wäre dann die Anweisung ungefähr wie folgt: Ich würde dann hier eine .cer-Datei bekommen mit einem entsprechenden PrivateKey.pvk. Beides würde ich erhalten, das wäre mit einem Schlüssel, sprich, mit einem Passwort hier gesichert und ich könnte es auf die Art und Weise einspielen. Das heißt, diese Anweisung und diese Anweisungen sind zwar an der Stelle vom Ergebnis her gleich, aber von der Dimension dahinter doch völlig anders. Das eine ist wirklich nur ein Zertifikat für den Eigengebrauch, da traue ich mir nur selber. Das Zertifikat, was ich von dem Zertifizierungsstelle bekomme oder da einkaufe, ist entsprechend so, dass ich natürlich dann auch gegenüber anderen eine gewisse Glaubwürdigkeit habe, wenn mit diesem Schlüssel Daten verschlüsselt werden. Alternativ können Sie selbstsignierte Zertifikate auch mit einem Passwort schützen. Das bedeutet, dass derjenige, der es benutzen möchte dieses Zertifikat, entsprechend auch über das Kennwort verfügen muss. Ich klicke das mal hier an, dann schaue ich doch mal in die Datenbank, wie es denn hier so ausschaut unter Security finden Sie hier ein Unterordner Certificates und da finde ich beide Zertifikate, die ich angelegt habe. Sie sehen, das Anlegen von Zertifikaten funktioniert auch nicht über die Oberfläche. Hier gibt es keinen entsprechenden Punkt, der mir sagt, ich darf ein neues Zertifikat oder sowas anlegen. So mit diesen beiden Zertifikaten kann ich dann 2 symmetrische Schlüssel erzeugen, Ich sage CREATE SYMMETRIC KEY, gebe den einen Namen, lege ein Algorithmus fest, mit dem er verschlüsselt werden soll und sage, welches Zertifikat dabei Verwendung finden soll. So, das ist damit geschehen. Dann lege ich eine Tabelle an und in der Tabelle möchte ich eine Spalte verschlüsseln. Das bedeutet, diese Spalte KontoNrEnctryted ist nicht von irgendeinem Typ Varchar oder Nvarchar oder Ähnliches, sondern wirklich varbinary (MAX) und das sind wirklich Binärdaten, die dort abgelegt werden. So, und wie benutze ich jetzt so einen symmetrischen Schlüssel? Ich muss ihn am Anfang, bevor ich ihn verwende, öffnen, ich muss ihn zum Schluss wieder schließen und zwischendrin kann ich ihn verwenden, indem ich entsprechend auf EncryptByKey auf diesen Schlüssel zugreife, indem ich die Funktion Key_GUID verwende, die wiederum bekommt den Namen übergeben, liefert mir eine GUID und zusammen mit dieser GUID wird EncryptByKey diesen Schlüssel verwenden, um den Inhalt, den ich hier als zweiten Parameter übergebe, entsprechend zu verschlüsseln. So und das sieht dann so aus. Und ein Blick die Tabelle zeigt mir diesen Inhalt, das heißt, hier werden die Daten nur noch verschlüsselt angezeigt. So, dann kann ich das Ganze wieder auslesen. Ich muss wieder zunächst einmal den Schlüssel öffnen, ich muss ihn zum Schluss wieder schließen und zwischendurch kann ich ihn benutzen. Ich habe jetzt hier die Funktion DecryptByKey und wenn ich das laufen lassen, dann kriege ich sofort den Inhalt. Ich muss jetzt hier nicht mehr angeben, welchen Schlüssel ich verwenden möchte und Ähnliches, weil das wird zusammen mit den Informationen für den rein Inhalt der Spalten mit abgelegt. Und dann kann ich zu dessen Zwecken einen Login anlegen, der keine Rechte hat mit einem User, der keine Rechte hat, der bekommt aber zumindestens das Select-Recht, hat aber kein Recht auf das Zertifikat möglicherweise. Und dann wechsle ich mit EXECUTE AS in den Sicherheitskontext dieses Users und versuche mal, ob das funktioniert. Nein, denn ein User muss entsprechend Zugriff haben auf den symmetrischen Schlüssel. Hat er es nicht, bekommt er ein Fehler an der Stelle. Ein bisschen schade, schöner wäre es natürlich, der Inhalt würde dann einfach garnicht oder unverschlüsselt zurückkommen. Ich bekomme hier wirklich einen harten Fehler. Ich muss das Recht haben, den Schlüssel zu verwenden und das ist das Control-Recht. Und ich kann also hingehen zum Beispiel und sagen, ich möchte den Schlüssel verwenden. Und nicht nur der Schlüssel, sondern auch das Zertifikat muss entsprechend für den User nutzbar sein. Und dann können wir das noch mal versuchen. Und dann funktioniert das. Das heißt, es ist doch ein bisschen aufwendiger, als man sich das wahrscheinlich wünschen würde als Entwickler. Ich muss mehrere Situationen abprüfen, ich muss gucken, ob entsprechend der Inhalt überhaupt entschlüsselt werden kann, und wenn er nicht entschlüsselt werden kann, dann gibt es schlicht und ergreifend eine Fehlermeldung, wie Sie hier oben gesehen haben, weil der entsprechende User nicht auf den Schlüssel oder auf das Zertifikat zugreifen kann. Das ist so ein bisschen unangenehm und ich muss sagen, in der Praxis wird sowas relativ selten verwendet. Häufiger geht man eher hin und lässt nicht den SQL Server verschlüsseln, sondern benutzt den enrsprechenden Business-Logik die ein oder andere .NET-Funktion. Das lässt sich da ein bisschen einfacher kontrollieren. Nichtsdestotrotz haben Sie hier gesehen, wie Sie mit symmetrischen Schlüsseln Inhalte verschlüsseln können und auch wieder entschlüsseln können.

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!