Sicherheit ist eine der wichtigsten Anforderungen an ein datengesteuertes System. Verschlüsselung ist eine der Möglichkeiten, die Daten zu sichern. Wikipedia definiert Verschlüsselung als:
“Verschlüsselung ist der Prozess, eine Nachricht oder Information so zu verschlüsseln, dass nur autorisierte Parteien darauf zugreifen können und nicht autorisierte Personen nicht. ”
In SQL Server 2016 hat Microsoft eine Verschlüsselungsfunktion namens Always Encrypted eingeführt . In diesem Artikel werden wir sehen, was Always Encrypted ist ist und wie es zum Verschlüsseln und Entschlüsseln von Daten verwendet werden kann, anhand einfacher Beispiele.
Was ist SQL Server Always Encrypted?
Immer verschlüsselt ist eine Sicherheitsfunktion, die es der Client-Anwendung ermöglicht, die Verschlüsselungs- und Entschlüsselungsschlüssel zu verwalten, wodurch sichergestellt wird, dass nur die Client-Anwendung sensible Daten entschlüsseln und verwenden kann.
Es gibt mehrere Verschlüsselungstechniken, sie sind jedoch nicht so sicher wie Always Encrypted . Beispielsweise wird die Verschlüsselung mit symmetrischen Schlüsseln verwendet, um Daten auf der Datenbankseite zu verschlüsseln. Ein Nachteil dieses Ansatzes besteht darin, dass jeder andere Datenbankadministrator, der über den Entschlüsselungsschlüssel verfügt, auf die Daten zugreifen kann.
Andererseits im Fall von Always Encrypted , werden die Daten clientseitig verschlüsselt und der Datenbankserver erhält eine verschlüsselte Version der Daten. Daher können die Daten auf der Datenbankseite nicht entschlüsselt werden. Nur der Client, der die Daten verschlüsselt hat, kann sie entschlüsseln.
Schlüsseltypen
SQL Server Always Encrypted-Funktion verwendet zwei Arten von Schlüsseln:
Spaltenverschlüsselungsschlüssel (CEK)
Es wird immer auf dem Datenbankserver abgelegt. Die Daten werden tatsächlich mit der Spalte CEK verschlüsselt. Wenn jedoch jemand auf der Datenbankseite Zugriff auf CEK hat, kann er die Daten entschlüsseln.
Spaltenhauptschlüssel (CMK)
Dieser Schlüssel wird auf der Client-Seite oder einem Drittanbieter-Speicher abgelegt. CMK wird zum Schutz des CEK verwendet und fügt eine zusätzliche Sicherheitsebene hinzu. Wer Zugriff auf CMK hat, kann den CEK tatsächlich entschlüsseln, der dann zum Entschlüsseln der eigentlichen Daten verwendet werden kann.
Verschlüsselungstypen
deterministisch
Diese Art der Verschlüsselung generiert immer ähnlichen verschlüsselten Text für denselben Datentyp. Wenn Sie Suchen und Gruppieren für eine Tabellenspalte implementieren möchten, verwenden Sie für diese Spalte die deterministische Verschlüsselung.
Randomisiert
Randomisierte Verschlüsselung generiert unterschiedlichen verschlüsselten Text für denselben Datentyp, wenn Sie versuchen, die Daten zu verschlüsseln. Verwenden Sie randomisierte Verschlüsselung, wenn die Spalte nicht zum Gruppieren und Suchen verwendet wird.
Konfigurieren Immer verschlüsselt Verwenden von SSMS
Wir können SQL Server Always Encrypted über SSMS konfigurieren. Aber vorher müssen wir eine Datenbank erstellen und der Datenbank eine Tabelle hinzufügen. Führen Sie dazu das folgende Skript aus:
CREATE DATABASE School Use School CREATE TABLE Student ( StudentId int identity(1,1) primary key, Name varchar(100), Password varchar(100) COLLATE Latin1_General_BIN2 not null, SSN varchar(20) COLLATE Latin1_General_BIN2 not null )
Im obigen Skript erstellen wir eine neue Datenbank namens School . Die Datenbank hat vier Spalten:StudentId , Name , Passwort und SSN . Sie können sehen, dass die Spalten Password und SSN ein COLLATE haben. Es ist notwendig, COLLATE für die Spalte anzugeben, die immer verschlüsselt werden soll . Die Art der Verschlüsselung wird als „Latin1_General_BIN2“ angegeben.
Lassen Sie uns nun zuerst versuchen, zwei Datensätze zur Student-Tabelle hinzuzufügen.
insert into Student ( Name, Password, SSN) VALUES ('John','abc123', '451236521478'), ('Mike','xyz123', '789541239654')
Zu diesem Zeitpunkt haben wir Always Encrypted nicht konfiguriert in einer der Spalten in der Student-Tabelle. Wenn Sie also versuchen, die Datensätze aus der Student-Tabelle auszuwählen, sehen Sie die tatsächlichen Datenwerte und nicht die verschlüsselten Werte. Führen Sie die folgende Abfrage aus, um Datensätze auszuwählen:
SELECT * FROM Student
Die Ausgabe sieht so aus:
Lassen Sie uns jetzt SSMS konfigurieren, um Always Encrypted zu aktivieren . Wie wir bereits gesagt haben, Immer verschlüsselt erstellt Spaltenverschlüsselungsschlüssel und Spaltenhauptschlüssel.
Um die vorhandenen Spaltenverschlüsselungsschlüssel und Spaltenhauptschlüssel für die Schuldatenbank anzuzeigen, gehen Sie zu Datenbanken -> Schule -> Sicherheit -> Immer verschlüsselte Schlüssel, wie in der folgenden Abbildung gezeigt:
Da Sie keinen verschlüsselten Datensatz im Datensatz haben, sehen Sie keinen CEK oder CMK in der Liste.
Aktivieren wir nun die Verschlüsselung in den Spalten „Passwort“ und „SSN“ der Tabelle „Student“. Klicken Sie dazu mit der rechten Maustaste auf Datenbanken -> Schule. Wählen Sie im Dropdown-Menü Spalten verschlüsseln aus Option wie in der Abbildung unten gezeigt:
Klicken Sie auf Weiter Schaltfläche auf der Einführung Fenster. Aus der Spaltenauswahl überprüfen Sie die Spalten Passwort und SSN. Wählen Sie für die Spalte Passwort den Verschlüsselungstyp als Randomisiert aus . Wählen Sie für die SSN-Spalte Deterministisch aus . Dies wird im folgenden Screenshot gezeigt:
Klicken Sie auf Weiter Schaltfläche auf der Hauptschlüsselkonfiguration Fenster. Standardmäßig wird der Hauptschlüssel wie unten gezeigt auf dem Clientcomputer gespeichert:
Klicken Sie auf Weiter Schaltfläche in den Laufeinstellungen und die Zusammenfassung Fenster. Wenn alles gut geht, sollten Sie die folgenden Ergebnisse sehen Fenster.
Wenn Sie nun erneut zu Datenbanken -> Schule -> Sicherheit -> Always Encrypted Keys gehen, sollten Sie die neu erstellten CEK und CMK sehen, wie in der folgenden Abbildung gezeigt:
Versuchen Sie nun, Datensätze aus der Schülertabelle auszuwählen.
SELECT * FROM Student
Die Ausgabe sieht so aus.
Aus der Ausgabe können Sie ersehen, dass die Spalten „Kennwort“ und „SSN“ verschlüsselt wurden.
Entschlüsselte Daten abrufen
Die SELECT-Abfrage hat verschlüsselte Daten zurückgegeben. Was ist, wenn Sie Daten in entschlüsselter Form abrufen möchten? Erstellen Sie dazu ein neues Abfragefenster in SSMS und klicken Sie dann auf Verbindung ändern oben im Objekt-Explorer, wie in der folgenden Abbildung gezeigt:
Das SQL Server-Verbindungsfenster wird angezeigt. Wählen Sie Optionen Schaltfläche von unten rechts wie unten gezeigt:
Klicken Sie im angezeigten Fenster auf Zusätzliche Verbindungsparameter oben links und geben Sie „Column Encryption Setting =Enabled“ in das Textfeld ein, wie im folgenden Screenshot gezeigt. Klicken Sie abschließend auf Verbinden Schaltfläche.
Führen Sie nun erneut die folgende SELECT-Abfrage aus:
SELECT * FROM Student
In den Ergebnissen sehen Sie die Datensätze, die in entschlüsselter Form zurückgegeben werden, wie unten gezeigt:
Schlussfolgerung
Immer E verschlüsselt ist eines der neuesten Sicherheitsfeatures von SQL Server. In diesem Artikel haben wir kurz überprüft, was immer ist E verschlüsselt ist und wie Sie es mit SQL Server Management Studio aktivieren. Wir haben auch ein einfaches Beispiel für das Verschlüsseln und Entschlüsseln von Daten mit Always gesehen E verschlüsselt Funktion.