SQL Server Backup in der Cloud

Eine der interessanten neuen Funktionen, die der SQL-Server 2014 bietet, ist die Möglichkeit Datenbank-Backups direkt in die Cloud durchzuführen. So ist es auch kleinen Unternehmen mit nur einem Standort möglich automatisch Backups anzufertigen die nicht am Standort selbst verbleiben sondern außerhalb gelagert werden. Sollte am Standort dann einmal eine Katastrophe passieren (z.B. dass der Keller in dem der Datenbankserver steht überflutet wird), so sind die Daten nicht weg sondern immer noch verfügbar. Wie genau man den SQL Server so einrichtet, dass das Datenbank-Backup in der Cloud abgelegt wird werde ich in diesem Blog-Artikel beschreiben. Da die Daten in der Cloud abgelegt werden ist es natürlich wichtig, dass das Datenbankbackup verschlüsselt wird. Wie das funktioniert werde ich auch in diesem Artikel erklären.

Die erste Voraussetzung die man schaffen muss um ein SQL Server Backup in der Cloud abzulegen ist, dass man dort natürlich einen Speicherplatz zur Verfügung stellen muss in dem das Backup gespeichert wird. Unter Azure heißt ein solcher Speicherplatz BLOB Storage. Melden Sie sich am Windows Azure Portal an, wählen Sie links in der Spalte Speicher aus. Klicken Sie dann unten auf das Icon Neu.

071714_1935_SQLServerBa1

Wählen Sie im Dialog die Schnellerfassung aus, geben Sie eine URL ein, wählen Sie einen Standort aus und ob Ihre Backups georedundant gespeichert werden sollen oder nicht. Geben Sie an, dass Ihre Backups georedundant gespeichert werden sollen haben Sie noch mehr Sicherheit, da Ihre Daten selbst dann noch vorhanden sind wenn es im Microsoft Rechenzentrum, das Sie zur Speicherung Ihrer Daten angegeben haben, zu einem Problem kommt.

071714_1935_SQLServerBa2

Nachdem der BLOB-Storage angelegt wurde müssen Sie noch einen Container definieren. Klicken Sie dazu den neuen Speicher an und wählen Sie im Menü oben Container aus und klicken Sie dann auf den Link Container erstellen.

071714_1935_SQLServerBa3

Geben Sie nun einen Namen für den neuen Container ein.

071714_1935_SQLServerBa4

Den letzten Schritt den Sie nun noch mit dem BLOB-Storage unternehmen müssen ist, dass Sie den Schlüssel für den Zugriff auf den Storage exportieren müssen. Klicken Sie hierzu auf den Link Dashboard und dann unten auf das Icon Zugriffschlüssel verwalten.

071714_1935_SQLServerBa5

Im Dialog „Zugriffsschlüssel verwalten“ kopieren Sie den Primären Zugriffschlüssel ins Clipboard, wir benötigen ihn nachher noch.

071714_1935_SQLServerBa6

So, auf der Seite von Azure ist nun alles eingerichtet. Als nächstes müssen Sie die Azure Zugriffsinformationen im SQL Server ablegen. Geben Sie hierzu den folgenden SQL Befehl ein (natürlich mit Ihrem Zugriffschlüssel an der richtigen Stelle):

CREATE CREDENTIAL GDSDBBackup 
WITH IDENTITY = 'gdstest', 
SECRET = '>>> Hier kommt der Zugriffschlüssel hin <<<'
GO

Erstellt man ein Backup in der Cloud ist es ratsam dieses Backup auch zu verschlüsseln. Eine weitere neue Funktion des SQL Servers 2014 ist die Backup-Verschlüsselung. Bevor man diese aber nutzen kann muss man sie zuerst einrichten. Der erste Schritt ist es, den Service Master Key auf Festplatte zu speichern. Das geht mit dem folgenden Befehl:

-- FGE: Service Master Key speichern

BACKUP SERVICE MASTER KEY
TO FILE = 'C:\Temp\Service_master_key.key'
ENCRYPTION BY PASSWORD = '!test123';
GO

Hat man den Service Master Key gespeichert muss man als Nächstes einen neuen Datenbank Master Key erstellen. Das funktioniert mit dem folgenden Befehl:

-- FGE: Neuen Datenbank Master Key erstellen

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '!test123';
GO

Natürlich sollte man auch diesen Schlüssel auf Festplatte speichern. Das stellt man mit dem folgenden Befehl an.

-- FGE: Neuen Master Key sichern

BACKUP MASTER KEY TO FILE = 'C:\Temp\DB_master_key.key'
ENCRYPTION BY PASSWORD = '!test123';
GO

Nun muss ein Zertifikat erstellt werden mit dem dann das Datenbank-Backup verschlüsselt werden kann. Dazu dient der folgende Befehl:

-- FGE: Zertifikat erzeugen

CREATE CERTIFICATE GDSMainDB_BackupEncryption
WITH SUBJECT = 'Zertifikat für die SQL Server Backup Verschlüsselung';
GO

Dieses Zertifikat sollte man natürlich auch noch exportieren, da man diesen Schlüssel zum Entschlüsseln des Datenbankbackups benötigt. Neben dem öffentlichen Schlüssel muss man auch den privaten Schlüssel exportieren.

-- FGE: Zertifikat sichern

BACKUP CERTIFICATE GDSMainDB_BackupEncryption
TO FILE = 'C:\Temp\BackupEncryption.cer'
WITH PRIVATE KEY
(
   FILE = 'C:\Temp\BackupEncryption_private_key.key'
 , ENCRYPTION BY PASSWORD = '!test123'
);

GO

Hat man alles richtig gemacht befinden sich jetzt auf der Festplatte im angegebenen Verzeichnis vier Dateien.

071714_1935_SQLServerBa7

Nun kann man z.B. mit Hilfe des Backup-Assistenten ein verschlüsseltes Backup in Windows Azure anlegen. Wählen Sie unter Destination Back up to: URL aus und geben Sie einen Dateinamen ein. Im Auswahlfeld „SQL credential“ können Sie die oben angelegten Anmeldeinformationen auswählen. Unter „Azure Storage Container“ wird der oben angelegten Container eingegeben.

071714_1935_SQLServerBa8

Um das Datenbank-Backup zu verschlüsseln müssen Sie auf der Seite „Backup Options“ unten die Verschlüsselung mit dem oben angelegten Verschlüsselungsschlüssel auswählen:

071714_1935_SQLServerBa9

Wenn Sie das Backup nun starten wird wie üblich ein Backup angelegt nur dieses Mal wird das Backup in der Cloud gespeichert. Natürlich kann man das alles auch scripten:

BACKUP DATABASE [ReportServer] TO 
URL = N'https://>>>AzureURL<<</dbbackup/ReportServer_backup_2014_07_16_222744.bak' 
  WITH CREDENTIAL = N'GDSDBBackup'
, NOFORMAT
, NOINIT
, NAME = N'ReportServer-Full Database Backup'
, NOSKIP
, NOREWIND
, NOUNLOAD
, ENCRYPTION(ALGORITHM = AES_256
     , SERVER CERTIFICATE = [GDSMainDB_BackupEncryption])
, STATS = 10 
GO

Schaut man in den Azure BLOB Storage, so findet man das Backup dort.

071714_1935_SQLServerBa10

Mit Hilfe des Scripts kann man nun einen Backup-Job schreiben der die Datenbank regelmäßig in Azure speichert.

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: