Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2014:Native Sicherungsverschlüsselung

Eine neue Funktion in SQL Server 2014, von der viele von Ihnen bis zu ihrer Ankündigung diese Woche auf dem PASS Summit noch nichts gehört hatten, ist die native Sicherungsverschlüsselung in den Editionen Standard, Business Intelligence und Enterprise (sorry, Web und Express werden nicht unterstützt). Dies ist etwas, das Drittanbieter seit langem anbieten, und es hält endlich Einzug in das Produkt und unterstützt vier Verschlüsselungsalgorithmen:AES 128, AES 192, AES 256 und Triple DES (3DES).

Wenn Sie derzeit transparente Datenverschlüsselung ausschließlich zum Zweck der verschlüsselten Daten in Ihren Sicherungsdateien verwenden, könnte dies eine Möglichkeit sein, von dieser Technik zu migrieren und verschlüsselte Sicherungen ohne die Auswirkungen zu erhalten, die TDE auf Ihr Live-System ausübt. Wenn Sie derzeit ein Tool eines Drittanbieters für verschlüsselte Backups verwenden, sollten Sie dies mit der Funktionalität und Leistung nativer verschlüsselter Backups vergleichen.

P.S. Sie können CTP2 jetzt herunterladen.

Ich wollte mich nicht mit Produkten von Drittanbietern vergleichen – ich bin mir sicher, dass sie alle gute Arbeit leisten und wahrscheinlich zusätzliche Funktionen haben, an die ich noch nicht einmal gedacht habe. Ich wollte nur testen, welche Auswirkungen die verschiedenen Algorithmen auf vollständige Backups haben würden, sowohl von und zu herkömmlichen Spinny Disks (RAID 1) als auch Solid-State-Laufwerken, und mit und ohne native Komprimierung.

Also habe ich die AdventureWorks2012-Datendatei heruntergeladen, zwei Kopien erstellt und sie awSSD.mdf genannt und awHDD.mdf , und platzierte einen auf dem RAID 1-Laufwerk (D:\) und einen auf dem SSD-Laufwerk (E:\). Dann habe ich beide mit FOR ATTACH_REBUILD_LOG angehängt , setzen Sie sie auf FULL Wiederherstellung, änderte die Standardeinstellungen für die automatische Vergrößerung und legte den Standardspeicherort für Protokolldateien dazwischen fest (da dies die einzige Möglichkeit ist, die ich kenne, um den Speicherort der neu erstellten Protokolldatei anzugeben):

USE [master];GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'D:\CTP2_Data';GO CREATE DATABASE awHDD ON (filename='D:\CTP2_Data\awHDD.mdf') FOR ATTACH_REBUILD_LOG; ALTER DATABASE awHDD SET RECOVERY FULL;ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awHDD MODIFY FILE (NAME =N'AdventureWorks2012_Log', FILEGROWTH =512000KB);GO EXEC , N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\CTP2_Data';GO CREATE DATABASE awSSD ON (filename='E:\CTP2_Data\awSSD.mdf') FOR ATTACH_REBUILD_LOG; ALTER DATABASE awSSD SET RECOVERY FULL;ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorks2012_Data', FILEGROWTH =512000KB);ALTER DATABASE awSSD MODIFY FILE (NAME =N'AdventureWorks2012_Log', FILEGROWTH =512000KB);

Als nächstes habe ich sie mit diesem Skript von Jonathan Kehayias vergrößert (damit sowohl die Datenbank als auch das Protokoll groß genug sind, um aussagekräftig zu sein). Dies dauerte etwa 4 Minuten pro Datenbank auf HDD und SSD.

An diesem Punkt EXEC sp_helpfile; ergab für jede Datenbank Folgendes:

name Datei-ID Dateiname Größe ----------------------- ------ -------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Nun ein paar Dinge zu dieser Funktion, bevor wir tatsächlich mit der Durchführung verschlüsselter Backups beginnen können. Sie benötigen ein Zertifikat (oder einen asymmetrischen Schlüssel), um die Verschlüsselung zu verwenden, und dies wiederum erfordert einen Hauptschlüssel. Ich habe ein Zertifikat gewählt und dieses wie folgt erstellt:

USE master;GOCREATE MASTER KEY ENCRYPTION BY PASSWORD ='p@ssw0rd';GOOPEN MASTER KEY DECRYPTION BY PASSWORD ='p@ssw0rd';GOCREATE CERTIFICATE TestCert WITH SUBJECT ='EncryptionTesting';GO

Sie erhalten auch eine Warnung, wenn Sie versuchen, eine verschlüsselte Sicherung mit einem Zertifikat zu erstellen, das selbst noch nicht gesichert wurde:

Warnung:Das zum Verschlüsseln des Datenbankverschlüsselungsschlüssels verwendete Zertifikat wurde nicht gesichert. Sie sollten das Zertifikat und den mit dem Zertifikat verknüpften privaten Schlüssel sofort sichern. Wenn das Zertifikat jemals nicht mehr verfügbar ist oder Sie die Datenbank auf einem anderen Server wiederherstellen oder anhängen müssen, müssen Sie Sicherungskopien sowohl des Zertifikats als auch des privaten Schlüssels haben, oder Sie können die Datenbank nicht öffnen.

In meinem Fall könnte ich einfach das Zertifikat und den Hauptschlüssel wie folgt sichern:

BACKUP CERTIFICATE TestCert TO FILE ='C:\temp\TestCert.cert' WITH PRIVATE KEY ( FILE ='C:\temp\TestCert.key', ENCRYPTION BY PASSWORD ='p@ssw0rd' ); MASTER KEY TO FILE BACKUP ='C:\temp\MasterKey.key' ENCRYPTION BY PASSWORD ='p@ssw0rd';

Streng genommen ist die Sicherung des Masterschlüssels nicht notwendig, um eine verschlüsselte Sicherung durchzuführen (oder gar die Warnung zu umgehen), aber Sie sollten diese trotzdem sichern. Und Sie werden wahrscheinlich ein stärkeres Passwort als p@ssw0rd verwenden wollen , speichern Sie es an einem anderen Ort als dem Laufwerk C:auf derselben Maschine usw. Schließlich sollten Sie bedenken, dass, wenn Sie Ihre Backups verschlüsseln und nicht alle richtigen Vorkehrungen treffen, sie im Katastrophenfall nutzlos sein können . Dies ist keine Funktion, die Sie einfach ohne viel Sorgfalt und Tests aktivieren sollten.

Nachdem all das aus dem Weg geräumt war, konnte ich mit dem Testen fortfahren. Dieses System hat nur eine einzige plattenbasierte Festplatte und eine einzige SSD, daher konnte ich SSD -> andere SSD oder HDD -> andere HDD nicht testen; nur von einem zum anderen oder auf dasselbe Laufwerk sichern. Die grundlegende Syntax zum Sichern mit Verschlüsselung lautet:

DATENBANK SICHERN ... MIT VERSCHLÜSSELUNG (ALGORITHMUS =, SERVER-ZERTIFIKAT =);

Und die vier möglichen Werte für <algorithm> sind AES_128 , AES_192 , AES_256 und TRIPLE_DES_3KEY .

Also habe ich als nächstes das Skript generiert, um die Backups auszuführen, um die Leistung und Größe verschiedener Kombinationen zu vergleichen – die vier verschiedenen Verschlüsselungsalgorithmen (und keine Verschlüsselung), mit und ohne Komprimierung, woher die Daten kommen (HDD oder SSD) und wo die Daten gesichert werden (HDD oder SSD). Das sind 40 verschiedene Backups, und das Skript, mit dem ich es generiert habe, sieht so aus:

DECLARE @sql NVARCHAR(MAX) =N'';;MIT s(s) AS (SELECT 1 UNION ALL SELECT 2),m AS (SELECT m FROM (VALUES('AES_128'),('AES_192'),('AES_256'),('TRIPLE_DES_3KEY'),(NULL )) AS m(m)),c AS (SELECT c FROM (VALUES('NO_COMPRESSION'),('COMPRESSION')) AS c(c)),d AS (SELECT d,t FROM (VALUES('D' ,'HDD'),('E','SSD')) AS d(d,t))SELECT @sql +=N'BACKUP DATABASE aw' + CASE s WHEN 1 THEN 'HDD' ELSE 'SSD' END + ' TO DISK =''' + d + ':\backup\' + n + '.bak'' WITH INIT, ' + c + ',' + COALESCE(' ENCRYPTION (ALGORITHMUS =' + m + ', SERVER CERTIFICATE =TestCert),', '') + ' NAME =''' + n + ''';' FROM ( SELECT *, n ='test' + CONVERT(VARCHAR(8000), RIGHT('0' + RTRIM(r),2)) + '-' + COALESCE(m,'NO_ENCRYPTION') + '-' + CASE WHEN r <11 THEN 'HDD' ELSE 'SSD' END + '-to-' + t + '-' + c FROM ( SELECT *, r =ROW_NUMBER() OVER (PARTITION BY d.d ORDER BY s.s,m.m,c.c ) FROM s CROSS JOIN m CROSS JOIN c CROSS JOIN d ) AS x) AS y ORDER BY r; --EXEC sp_executesql @sql;--GO 10 SELECT CONVERT(XML, @sql);

Sieht wirklich kompliziert aus, aber in Wirklichkeit generiert es nur 40 BACKUP DATABASE Saiten. Ich wähle als XML aus, damit Sie, wenn Sie auf die Ergebnisse im Raster klicken, die gesamte Ausgabe sehen können – anstelle von PRINT oder die Auswahl der Ausgabe in Raster/Text beschränkt Sie auf. Die Ausgabe in diesem Fall ist unten (zum Ein-/Ausblenden klicken):

BACKUP DATABASE awHDD TO DISK ='D:\backup\test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD TO DISK ='E:\backup\test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test01-NO_ENCRYPTION-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test02-NO_ENCRYPTION-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test03-AES_128-HDD-to-HDD-COMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_128, SERVERZERTIFIKAT =TestCert), NAME ='test03-AES_128-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD TO DISK ='E:\backup\test03-AES_128-HDD-to-SSD-COMPRESSIO N.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_128, SERVERZERTIFIKAT =TestCert), NAME ='test03-AES_128-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test04 -AES_128-HDD-to-SSD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test04-AES_128-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test04-AES_128-HDD-to- HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test05-AES_192-HDD-to-HDD-COMPRESSION.bak' MIT INIT, KOMPRESSION, VERSCHLÜSSELUNG (ALGORITHMUS =AES_192, SERVERZERTIFIKAT =TestCert), NAME ='test05-AES_192-HDD-to-HDD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_192 , SERVER-ZERTIFIKAT =TestCert) , NAME ='test05-AES_192-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test06-AES_192-HDD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION ( ALGORITHMUS =AES_192, SERVER-ZERTIFIKAT =TestCert), NAME ='test06-AES_192-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test06-AES_192-HDD-to-HDD-NO_COMPRESSION. bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test06-AES_192-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test07-AES_256 -HDD-to-HDD-COMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_256, SERVERZERTIFIKAT =TestCert), NAME ='test07-AES_256-HDD-to-HDD-COMPRESSION';BACKUP-DATENBANK awHDD TO DISK ='E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_256, SERVERZERTIFIKAT =TestCert), NAME ='test07-AES_256-HDD-to-SSD- COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\te st08-AES_256-HDD-to-SSD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test08-AES_256-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test08-AES_256-HDD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test08-AES_256-HDD-to -HDD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION.bak' MIT INIT, KOMPRESSION, VERSCHLÜSSELUNG (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER-ZERTIFIKAT =TestCert), NAME ='test09-TRIPLE_DES_3KEY-HDD-to-HDD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION.bak' MIT INIT, KOMPRESSION, VERSCHLÜSSELUNG (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test09-TRIPLE_DES_3KEY-HDD-to-SSD-COMPRESSION';BACKUP DATABASE awHDD TO DISK ='E:\backup\test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION .bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awHDD TO DISK ='D:\backup\test10- TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test10-TRIPLE_DES_3KEY-HDD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E :\backup\test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, NAME ='test11-NO_ENCRYPTION-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup \test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test12- NO_ENCRYPTION-S SD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, NAME ='test12-NO_ENCRYPTION-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test13-AES_128-SSD-to -HDD-COMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_128, SERVER-ZERTIFIKAT =TestCert), NAME ='test13-AES_128-SSD-to-HDD-COMPRESSION'; BACKUP-DATENBANK awSSD TO DISK ='E:\ backup\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_128, SERVER-ZERTIFIKAT =TestCert), NAME ='test13-AES_128-SSD-to-SSD-COMPRESSION';BACKUP DATENBANK awSSD TO DISK ='E:\backup\test14-AES_128-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test14-AES_128-SSD -to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test14-AES_128-SSD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_128, SERVER CERTIFICATE =TestCert) , NAME ='test14-AES_128-SSD-zu-H DD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' MIT INIT, KOMPRESSION, VERSCHLÜSSELUNG (ALGORITHMUS =AES_192, SERVERZERTIFIKAT =TestCert), NAME ='test15-AES_192-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_192 , SERVER CERTIFICATE =TestCert), NAME ='test15-AES_192-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test16-AES_192-SSD-to-SSD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test16-AES_192-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test16-AES_192-SSD- to-HDD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test16-AES_192-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test17-AES_256-SSD-zu-HDD-COMPRE SSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_256, SERVERZERTIFIKAT =TestCert), NAME ='test17-AES_256-SSD-to-HDD-COMPRESSION'; SICHERUNGSDATENBANK awSSD TO DISK ='E:\backup\test17 -AES_256-SSD-zu-SSD-KOMPRESSION.bak' MIT INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =AES_256, SERVER-ZERTIFIKAT =TestCert), NAME ='test17-AES_256-SSD-zu-SSD-KOMPRESSION'; SICHERUNG DER DATENBANK awSSD ZU DISK ='E:\backup\test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test18-AES_256-SSD-to- SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test18-AES_256-SSD-to-HDD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test18-AES_256-SSD-to-HDD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHMUS =TRIPLE_DES_3KEY , SERVER-CER TIFICATE =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION.bak' WITH INIT, KOMPRIMIERUNG, VERSCHLÜSSELUNG (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER-ZERTIFIKAT =TestCert), NAME ='test19-TRIPLE_DES_3KEY-SSD-to-SSD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test20-TRIPLE_DES_3KEY-SSD-to- SSD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to-SSD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup \test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION.bak' MIT INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHMUS =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION'; 

Ich musste nichts Besonderes tun, um diese zu timen, da ich alle relevanten Statistiken aus der msdb-Datenbank ziehen konnte, nachdem sie fertig waren (der einzige Nachteil ist, dass die Dauer nur auf Sekunden genau gemessen wird, es sei denn, ich wollte um die Ausgabe manuell zu parsen). Also habe ich EXEC sp_executesql auskommentiert und GO Zeilen (ich wollte jedes Backup 10 Mal ausführen, um Durchschnittswerte zu erhalten, Anomalien auszuschließen usw.), drückte F5 und machte mich an die Arbeit an einer meiner Sitzungen für den PASS Summit.

Als ich zurückkam, überprüfte ich die msdb-Tabellen, um die Größen/Dauern für jedes Backup zu erhalten. Diese Abfrage ist ganz einfach:

;MIT x AS( SELECT name, natürliche_größe =backup_größe/1024/1024.0, komprimierte_größe =komprimierte_sicherungsgröße/1024/1024.0, dauer =1.0*DATEDIFF(SECOND, backup_start_date, backup_finish_date) FROM msdb.dbo.backupset WHERE name LIKE 'test %')SELECT name, [natural_size] =MAX(natural_size), [compressed_size] =MAX(compressed_size), [min_duration] =MIN(duration), [max_duration] =MAX(duration), [avg_duration] =AVG(duration) FROM x GROUP BY NameORDER BY Name;

Das würde mir die Daten geben, die ich brauchte, um hübsche Diagramme zu erstellen.

Auswirkung auf die Größe

Abhängig von Ihrer Erfahrung mit Verschlüsselung im Allgemeinen kann es Sie überraschen, dass die Verschlüsselung einer Datenbanksicherung nur sehr geringe Auswirkungen auf ihre Gesamtgröße hat. Wie das funktioniert, geht mit Sicherheit über den Rahmen dieses Beitrags hinaus; Eine einfache Erklärung wäre, dass – zumindest mit AES-Verschlüsselung – die Komprimierung bei den meisten Ausgaben nicht sehr effektiv ist, da es sich im Grunde um zufälliges Kauderwelsch handelt.

Das Endergebnis ist, dass dieses Diagramm nicht sehr aufregend ist. Die komprimierten und nicht komprimierten Größen nativer Backups gegen die vier verschiedenen Verschlüsselungsmethoden:


Größe von Backups mit und ohne Verschlüsselung in MB

Wie Sie sehen können, gab es fast keine Auswirkungen auf die Größe der Datenbank – etwa 0,03 % mehr Größe für ein nicht komprimiertes Backup und zusätzliche 0,04 % für ein komprimiertes Backup.

Auswirkung auf die Leistung

Während die Verschlüsselung einen vernachlässigbaren Einfluss auf die Größe hatte, hatte sie es die Geschwindigkeit des Backups beeinflussen. Aber in einigen Fällen nicht so, wie Sie denken. Hier ist das Gesamtmaß der durchschnittlichen Laufzeiten für jeden Ansatz:


Durchschnittliche Dauer verschiedener Sicherungen in Sekunden

Ich habe wirklich erwartet, dass die Verschlüsselung immer einen Leistungseinbruch verursacht, und Sie sollten in Ihrer Umgebung testen, ob sich Ihre Ergebnisse von meinen unterscheiden. Ich werde zurückkommen und dies mit einem neuen Diagramm aktualisieren, das bestimmte Fälle zeigt, die mich überrascht haben, und einige Ausreißerwerte entfernen, um sicherzustellen, dass die Ergebnisse wirklich repräsentativ sind.

Eine Einschränkung

Ein wichtiger Hinweis:Sie können keine verschlüsselten Backups anhängen. Wenn Sie eine verschlüsselte Sicherungsdatei mit WITH INIT erzeugen , und dann versuchen, ein weiteres verschlüsseltes Backup an dieselbe Datei anzuhängen, erhalten Sie diesen Fehler:

Msg 3095, Level 16, State 1, Line 11
Die Sicherung kann nicht durchgeführt werden, da „ENCRYPTION“ angefordert wurde, nachdem das Medium mit einer inkompatiblen Struktur formatiert wurde. Um an diesen Mediensatz anzuhängen, lassen Sie entweder „ENCRYPTION“ weg oder erstellen Sie einen neuen Mediensatz, indem Sie WITH FORMAT in Ihrer BACKUP-Anweisung verwenden. Wenn Sie WITH FORMAT auf einem vorhandenen Mediensatz verwenden, werden alle seine Sicherungssätze überschrieben.
Msg 3013, Level 16, Status 1, Zeile 11
BACKUP DATABASE wird abnormal beendet.

Sie können verwirrenderweise ein non anhängen -verschlüsselte Sicherung, wenn die ursprüngliche Datei verschlüsselt war. Dies ist nicht beabsichtigt und ist ein Fehler, den ich auf Connect gemeldet habe (#805220, aber derzeit als privat markiert); hoffentlich werden sie dies vor RTM ansprechen.

Hier ist zwischenzeitlich Vorsicht geboten, da sich an RESTORE HEADERONLY nichts geändert hat ausgegeben, um anzugeben, ob eine der beigefügten Sicherungen verschlüsselt war. Um dies herauszufinden, müssen Sie die BackupSetGUID überprüfen Wert in dieser Ausgabe bei Position = 1 , und suchen Sie die entsprechende backup_set_uuid Wert in msdb.dbo.backupset . Diese Tabelle hat neue Spalten zur Unterstützung der Verschlüsselung, wo Sie diese Informationen erhalten können:key_algorithm , encryptor_thumbprint , und encryptor_type . Dies ist problematisch, wenn Sie das backupset nicht haben Daten – vielleicht wurden sie während Wartungsaufgaben gelöscht, oder vielleicht können Sie nicht darauf zugreifen, weil Sie sich wirklich von einer Katastrophe erholen oder nur die .bak-Datei haben (oder nur die .bak-Datei aus anderen Gründen haben). In diesem Fall hoffe ich, dass es eine andere Möglichkeit gibt, anhand der Sicherungsdatei zu erkennen, dass sie verschlüsselt wurde (und wie), aber zum Zeitpunkt des Schreibens kenne ich keine Möglichkeit. Ich habe einen Vorschlag eingereicht (#805292, auch privat), dass die Ausgabe von RESTORE HEADERONLY mit Verschlüsselungsinformationen angereichert werden, genauso wie sie mit Komprimierungsinformationen angereichert wurden, als diese Funktion in SQL Server 2008 hinzugefügt wurde.

Wenn sie diese Probleme lösen (und ich bin zuversichtlich, dass sie das tun werden), werde ich all dieses Rauschen entfernen, aber es ist wichtig, sich dessen in der Zwischenzeit bewusst zu sein, wenn Sie irgendwelche Tests mit aktuellen CTPs durchführen.

Als Nächstes…

Was diese Art der Sicherung für die Wiederherstellung bedeutet, darauf werde ich in einem anderen Beitrag zurückkommen, wenn ich die Wiederherstellungsgeschwindigkeiten teste und etwaige Problembereiche dort aufzeige. Ich möchte diese Tests auch wiederholen, um verschlüsselte Protokollsicherungen zu untersuchen.