Im Beitrag “SQL Server: Vollsicherung und Wiederherstellung” haben wir uns angesehen, wie wir eine Sicherung einer SQL Server-Datenbank durchführen können. Wenn wir uns eine solche Sicherungsdatei im Texteditor ansehen, stellen wir schnell fest, dass in einem Backup, wie wir es in diesem Beitrag vorgestellt haben, die Daten unverschlüsselt gespeichert sind. Liegen solche Daten im heimischen Server, der durch das Windows-Sicherheitssystem vor Zugriffen Fremder gesichert ist, mag das praktikabel sein. Sollen jedoch Kopien von diesen Daten angelegt werden, die nicht auf diese Weise gesichert sind, ist eine zusätzliche Verschlüsselung nötig. Das verschlüsselte Sichern einer SQL Server-Datenbank ist wesentlich aufwendiger als die einfache Sicherung. Deshalb schauen wir uns dies Schritt für Schritt im vorliegenden Beitrag an.
Im Beitrag SQL Server: Vollsicherung und Wiederherstellung (www.access-im-unternehmen.de/14) haben wir uns bereits angesehen, wie wir unter dem SQL Server eine einfache Vollsicherung einer Datenbank durchführen können. Dort haben wir außerdem gezeigt, wie wir diese Sicherung zeitlich gesteuert automatisiert durchführen lassen können.
In einem weiteren Beitrag mit dem Titel Zertifikate und Kennwörter mit Keepass speichern (www.access-im-unternehmen.de/1451) haben wir das Tool Keepass vorgestellt, mit dem wir Daten wie Kennwörter oder Zertifikate speichern können. Dieses Tool werden wir in der folgenden Abhandlung nutzen, um die für die Wiederherstellung benötigten Daten sicher zu speichern. Denn was hilft eine verschlüsselte Kopie einer Datenbank, wenn die zum Entschlüsseln nötigen Informationen irgendwo auf der Festplatte herumliegen – oder noch besser auf einem Zettel an der Pinnwand?
Schlüssel und Zertifikat als Voraussetzung
Für das Verschlüsseln des Backups einer Datenbank benötigen wir einen Schlüssel und für diesen Schlüssel ein Zertifikat. Diese werden zum Verschlüsseln verwendet und auch zum Entschlüsseln, wenn eine Datenbank auf Basis einer verschlüsselten Datenbank wiederhergestellt werden soll. Dieses erstellen wir direkt im SQL Server Management Studio.
Den Schlüssel und das Zertifikat legen wir über T-SQL-Abfragen an, die wir im Kontext der Master-Datenbank des SQL Servers ausführen. Dazu öffnen wir im Objekt-Explorer des SQL Server Management Studios das Element Databases||System Databases und klicken mit der rechten Maustaste auf den Eintrag Master. Im Kontextmenü führen wir den Befehl New Query aus (siehe Bild 1).
Bild 1: Neue Abfrage für die Master-Datenbank
Master-Key für die Master-Datenbank
Als Erstes legen wir über eine T-SQL-Abfrage den sogenannten Master-Key für die Master-Datenbank an. Dazu nutzen wir den folgenden Befehl, mit dem wir den zu erstellenden Key angeben:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N''DiesIstDerSchluessel''; GO
Der CREATE MASTER KEY-Befehl erstellt einen Master-Key, der für die Verschlüsselung von Daten innerhalb der Datenbank verwendet wird. Der Schlüssel wird durch das angegebene Kennwort geschützt.
Das N-Präfix vor dem Kennwort gibt an, dass es sich um eine Unicode-Zeichenkette handelt.
Damit das Kennwort nicht leicht erraten werden kann, wollen wir es nicht wie im obigen Beispiel selbst vergeben, sondern das im oben angegebenen Beitrag Zertifikate und Kennwörter mit Keepass speichern verwendete Tool Keepass nutzen.
Nachdem wir dieses geöffnet haben, fügen wir als Erstes einen neuen Unterordner unter Database namens SQLServer hinzu. Hier sollen alle Elemente gespeichert werden, die mit dem SQL Server in Verbindung stehen. Dazu markieren wir den zuvor angelegten Ordner SQLServer und wählen aus dem Menü den Befehl Eintrag hinzufügen aus (siehe Bild 2).
Bild 2: Einfügen eines neuen Eintrags in KeePass
Danach öffnet sich der Dialog Eintrag hinzufügen. Hier geben wir als Titel beispielsweise Masterkey für Datenbank Master an. Außerdem lassen wir uns durch einen Klick auf die Schaltfläche mit den drei Punkten das bereits automatisch generierte Kennwort anzeigen (siehe Bild 3). Das ist notwendig, da wir es ja noch kopieren und in unser T-SQL-Skript einfügen wollen. Wenn Sie das Kennwort neu generieren lassen möchten, können Sie dazu die Schaltfläche Ein Passwort generieren nutzen, das rechts neben dem Feld Passwort-Wdh. angezeigt wird. Das Kennwort kopieren wir nun in die Zwischenablage.
Bild 3: Erstellen eines neuen Kennworts
Nun folgt ein wichtiger Schritt – das Speichern des Kennworts in KeePass. Dazu schließen Sie den Dialog Eintrag hinzufügen und finden im Hauptfenster von KeePass den neuen Eintrag aus Bild 4 vor.
Bild 4: Der gespeicherte Schlüssel in KeePass
Master Key anlegen
Das Kennwort aus der Zwischenablage fügen wir nun wie folgt an Stelle des bisher verwendeten Kennworts DiesIstDerSchluessel in der CREATE MASTER KEY-Anweisung ein:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N''PqM8BMLK5x7BBNejCxfh''; GO
Diesen Befehl können wir nun mit F5 ausführen und erhalten die Meldung aus Bild 5 als Ergebnis.
Bild 5: Anlegen eines Schlüssels für die Master-Datenbank
Zertifikat erstellen
Nun wollen wir ein Zertifikat anlegen, das mit dem soeben erstellten Master-Key verschlüsselt wird. Dazu erstellen wir mit der folgenden Anweisung im gleichen Abfragefenster ein Zertifikat:
CREATE CERTIFICATE certBackup_Experimente WITH SUBJECT = N''Zertifikat zum Verschlüsseln der Sicherung der Datenbank Experimente'', EXPIRY_DATE = N''20401231'';
Der CREATE CERTIFICATE-Befehl erstellt ein Zertifikat mit dem angegebenen Namen. Das Zertifikat wird verwendet, um Sicherungen der angegebenen Datenbank zu verschlüsseln. Das Zertifikat hat eine Beschreibung (N”Zertifikat zum Verschlüsseln der Sicherung der Datenbank Experimente”) und ein Ablaufdatum (N”20401231”).
Auch diesen Befehl führen wir nun aus. Damit der Befehl zum Erstellen des Schlüssels nicht ebenfalls ausgeführt wird, markieren wir nur den auszuführenden Befehl und betätigen anschließend die Taste F5, um diesen auszuführen.
Damit haben wir das Zertifikat erstellt und es ist nun im Objekt-Explorer der master-Datenbank unter Security|Certificates zu finden (siehe Bild 6).
Bild 6: Das Zertifikat im Objekt-Explorer
Zertifikat und privaten Zertifikatsschlüssel als Datei sichern
Dieses Zertifikat können wir nun zur Verschlüsselung des Backups und zum Entschlüsseln beim Wiederherstellen des Backups verwenden. Der Haken ist jedoch: Wenn tatsächlich der komplette Rechner beschädigt wird und wir nicht mehr auf die SQL Server-Instanz zugreifen können, lässt sich auch die Sicherung der Datenbank nicht wiederherstellen.
Also müssen wir auch das Zertifikat sichern. Dazu nutzen wir einen weiteren T-SQL-Befehl, der wie in Listing 1 aussieht.
BACKUP CERTIFICATE certBackup_Experimente TO FILE = N''C:\...\certBackup_Experimente.cer'' WITH PRIVATE KEY (ENCRYPTION BY PASSWORD = N''Zertifikatskennwort'', FILE = N''C:\...\certBackup_Experimente.pvk''); GO
Listing 1: T-SQL-Skript zum Sichern des Zertifikats
Durch Ausführen dieses Skripts wird eine Sicherung des Zertifikats certBackup_Experimente erstellt, die aus der Zertifikatsdatei und der privaten Schlüsseldatei besteht.
Diese Dateien werden auf den angegebenen Speicherorten auf der Festplatte gespeichert. Die Sicherung kann später verwendet werden, um das Zertifikat und den privaten Schlüssel wiederherzustellen, falls dies erforderlich ist.
Der BACKUP CERTIFICATE-Befehl erstellt eine Sicherungskopie des Zertifikats mit dem Namen certBackup_Experimente. Das Zertifikat wird in zwei separate Dateien gesichert.