SQL Server: Verschlüsselte Backups erstellen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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).

Neue Abfrage für die Master-Datenbank

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).

Einfügen eines neuen Eintrags in KeePass

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.

Erstellen eines neuen Kennworts

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.

Der gespeicherte Schlüssel in KeePass

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.

Anlegen eines Schlüssels für die Master-Datenbank

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).

Das Zertifikat im Objekt-Explorer

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.

[

Die Zertifikatsdatei (.cer) wird angegeben durch den Parameter TO FILE mit dem Pfad ”C:\…\certBackup_Experimente.cer”. Hier wird das Zertifikat im Zertifikatstransferformat gespeichert.

Die private Schlüsseldatei (.pvk) wird angegeben durch den Parameter WITH PRIVATE KEY mit dem Schlüssel ENCRYPTION BY PASSWORD = N”Zertifikatskennwort” und dem Dateinamen mit FILE = N”C:\…\certBackup_Experimente.pvk”.

Statt der drei Punkte in den beispielhaften Pfadangaben geben Sie ein Verzeichnis an, in dem die Dateien gesichert werden sollen. Aus diesem übertragen wir die Dateien später in KeePass. Es kann sein, dass dies einen Fehler liefert. Der Grund ist meist, dass der SQL Server keine Berechtigungen hat, in das angegebene Verzeichnis zu schreiben.

Um dies zu umgehen, ohne diese Berechtigungen entsprechend setzen zu müssen, verwenden wir ein Verzeichnis, in das der SQL Server auf jeden Fall schreiben kann – nämlich das Verzeichnis, in dem sich auch die Datenbankdateien befinden. Dieser Pfad lautet beispielsweise wie folgt:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA

Statt des hier verwendeten Kennwort-Platzhalters Zertifikatskennwort geben Sie ein neues Kennwort an, dass sie wieder mit Keepass erstellen. Dieses versehen wir wieder mit einem aussagekräftigen Titel, hier Key für Zertifikat der Datenbank “Experimente” (siehe Bild 7). Bevor wir dieses Kennwort durch Schließen des Dialogs speichern, kopieren wir es wieder in die Zwischenablage.

Anlegen eines privaten Schlüssels

Bild 7: Anlegen eines privaten Schlüssels

KeePass enthält nun zwei Einträge wie in Bild 8. Das Kennwort aus der Zwischenablage fügen wir für den Parameter DECRYPTION BY PASSWORD in den T-SQL-Befehl ein. Achten Sie beim Einfügen darauf, dass Sie nicht Leerzeichen oder andere nicht erwünschte Elemente zwischen den Hochkommata einfügen.

Der private Schlüssel für das Zertifikat in KeePass

Bild 8: Der private Schlüssel für das Zertifikat in KeePass

Den Befehl fügen wir wieder im Abfragefenster für die Datenbank master ein, markieren diesen und führen ihm mit F5 aus, was wie in Bild 9 aussieht.

Sichern des Zertifikats auf der Festplatte

Bild 9: Sichern des Zertifikats auf der Festplatte

Nach dem Ausführen landen die beiden Dateien in dem angegebenen Verzeichnis – hier der Einfachheit halber c:\Keepass genannt (siehe Bild 10).

Das Zertifikat und die Schlüsseldatei auf der Festplatte

Bild 10: Das Zertifikat und die Schlüsseldatei auf der Festplatte

Nochmal zur Sicherheit: Diese Dateien dürfen nicht verloren gehen, denn sonst können Sie ein damit verschlüsseltes Backup einer Datenbank nicht wieder entschlüsseln.

Zertifikat und Schlüssel in KeePass sichern

Die Zertifikatsdatei und den Schlüssel haben wir zwar nun im Dateisystem gespeichert, allerdings hilft uns das auch nicht weiter, wenn der Rechner nicht mehr funktioniert oder anderweitig nicht mehr zugreifbar ist.

Also müssen wir diese auch noch separat sichern, und zwar so, dass diese Sicherung auch nach einem Verlust des Rechners noch wiederhergestellt werden kann.

In diesem Fall nutzen wir KeePass gleich noch ein zweites Mal: Wir öffnen wieder den Eintrag Key für Zertifikat der Datenbank “Experimente” und wechseln dort zur Registerseite Erweitert. Hier klicken wir unter Dateianhänge auf Anhängen und fügen die .cer und die .pvk-Datei ein (siehe Bild 11). Danach schließen wir den Dialog Eintrag bearbeiten wieder.

Sichern der Zertifikatsdatei und der Schlüsseldatei in KeePass

Bild 11: Sichern der Zertifikatsdatei und der Schlüsseldatei in KeePass

Verschlüsseltes Backup anlegen

Damit sind die Vorbereitungen abgeschlossen und wir können uns dem eigentlichen Backup zuwenden. Dazu klicken wir im SQL Server Management Studio mit der rechten Maustaste auf die zu sichernde Datenbank und wählen den Befehl Tasks|Backup… aus. Dies öffnet den Dialog Backup Database – Experimente.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar