Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2014 :Criptografia de backup nativa


Um novo recurso no SQL Server 2014 que muitos de vocês não conheciam até ser anunciado esta semana no PASS Summit é a criptografia de backup nativa nas edições Standard, Business Intelligence e Enterprise (desculpe, Web e Express não são suportados). Isso é algo que os fornecedores de terceiros oferecem há muito tempo e finalmente chega ao produto, suportando quatro algoritmos de criptografia:AES 128, AES 192, AES 256 e Triple DES (3DES).

Se você estiver usando o Transparent Data Encryption apenas com o objetivo de ter dados criptografados em seus arquivos de backup, essa pode ser uma maneira de migrar dessa técnica e ter backups criptografados sem o hit que o TDE coloca em seu sistema ativo. Se você estiver usando uma ferramenta de terceiros para backups criptografados, você deve comparar isso com a funcionalidade e o desempenho de backups criptografados nativos.

P.S. Você pode baixar o CTP2 agora mesmo.

Eu não queria entrar em comparação com produtos de terceiros - tenho certeza que todos eles fazem um bom trabalho e provavelmente têm recursos adicionais que eu nem pensei. Eu só queria testar que tipo de impacto os diferentes algoritmos teriam em backups completos, de e para discos giratórios tradicionais (RAID 1) e unidades de estado sólido, e com e sem compactação nativa.

Então, baixei o arquivo de dados AdventureWorks2012, fiz duas cópias, nomeei-as awSSD.mdf e awHDD.mdf , e colocou um na unidade RAID 1 (D:\) e outro na unidade SSD (E:\). Então eu anexei ambos com FOR ATTACH_REBUILD_LOG , defina-os como FULL recovery, alterou as configurações de crescimento automático padrão e defina o local padrão para os arquivos de log no meio (já que essa é a única maneira que conheço de especificar o local do arquivo de log reconstruído):
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') PARA 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 =512000KEY_KB);_GOMACHE x'p_instance_regwrite , 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);

Em seguida, eu os ampliei usando este script de Jonathan Kehayias (para que o banco de dados e o log fossem grandes o suficiente para serem significativos). Isso levou cerca de 4 minutos por banco de dados no HDD e no SSD.

Nesse ponto, EXEC sp_helpfile; produziu o seguinte para cada banco de dados:
nome fileid nome do arquivo tamanho ----------------------- ------ -------- ------ ----AdventureWorks2012_Data 1 .mdf 1553408 KBAdventureWorks2012_Log 2 .ldf 5605504 KB

Agora, algumas coisas sobre esse recurso antes que possamos realmente começar a realizar backups criptografados. Você precisa ter um certificado (ou chave assimétrica) para usar a criptografia, e isso, por sua vez, exigirá uma chave mestra. Eu escolhi um certificado e os criei da seguinte forma:
USE master;GOCREATE MASTER KEY ENCRYPTION POR SENHA ='p@ssw0rd';GOOPEN MASTER DECRYPTION POR PASSWORD ='p@ssw0rd';GOCREATE CERTIFICATE TestCert WITH SUBJECT ='EncryptionTesting';GO

Você também recebe um aviso se tentar criar um backup criptografado usando um certificado que não tenha feito backup:
Aviso:Não foi feito backup do certificado usado para criptografar a chave de criptografia do banco de dados. Você deve fazer backup imediatamente do certificado e da chave privada associada ao certificado. Se o certificado ficar indisponível ou se você precisar restaurar ou anexar o banco de dados em outro servidor, você deverá ter backups do certificado e da chave privada ou não poderá abrir o banco de dados.
No meu caso, eu poderia apenas fazer backup do certificado e da chave mestra, assim:
BACKUP CERTIFICATE TestCert TO FILE ='C:\temp\TestCert.cert' COM CHAVE PRIVADA ( FILE ='C:\temp\TestCert.key', ENCRIPTAÇÃO POR SENHA ='p@ssw0rd' ); BACKUP MASTER KEY TO FILE ='C:\temp\MasterKey.key' ENCRIPTAÇÃO POR SENHA ='p@ssw0rd';

Estritamente falando, fazer backup da chave mestra não é necessário para realizar um backup criptografado (ou mesmo para evitar o aviso), mas você deve fazer backup de qualquer maneira. E você provavelmente vai querer usar uma senha mais forte que p@ssw0rd , armazene-o em outro lugar que não seja a unidade C:na mesma máquina, etc. . Este não é um recurso que você deve ativar sem uma quantidade razoável de diligência e testes.

Com tudo isso fora do caminho, eu poderia continuar com os testes. Este sistema tem apenas um único disco baseado em prato e um único SSD, então não pude testar SSD -> SSD ou HDD diferente -> HDD diferente; apenas fazendo backup de um para o outro, ou para a mesma unidade. A sintaxe básica para fazer backup com criptografia é:
BASE DE DADOS DE BACKUP ... COM CRIPTOGRAFIA (ALGORITMO =, CERTIFICADO DO SERVIDOR =);

E os quatro valores possíveis para <algorithm> são AES_128 , AES_192 , AES_256 e TRIPLE_DES_3KEY .

Então, em seguida, gerei o script para executar os backups para comparar o desempenho e o tamanho de várias combinações – os quatro algoritmos de criptografia diferentes (e sem criptografia), com e sem compactação, de onde vêm os dados (HDD ou SSD) e de onde os dados são copiados para (HDD ou SSD). São 40 backups diferentes, e o script que usei para gerá-lo se parece com isso:
DECLARE @sql NVARCHAR(MAX) =N'';;WITH 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 + ' PARA DISCO =''' + d + ':\backup\' + n + '.bak'' COM INIT, ' + c + ',' + COALESCE(' ENCRIPTAÇÃO (ALGORITMO =' + m + ', SERVER CERTIFICATE =TestCert),', '') + ' NOME =''' + n + ''';' FROM ( SELECT *, n ='teste' + CONVERT(VARCHAR(8000), RIGHT('0' + RTRIM(r),2)) + '-' + COALESCE(m,'NO_ENCRYPTION') + '-' + CASE WHEN 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);

Parece muito complicado, mas na verdade está apenas gerando 40 BACKUP DATABASE cordas. Eu seleciono como XML para que, ao clicar nos resultados na grade, você possa visualizar toda a saída – em vez do que PRINT ou selecionar a saída para grade/texto limitará você. A saída neste caso está abaixo (clique para mostrar/ocultar):
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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =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' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test05-AES_192-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD TO DISK ='E:\backup\test05-AES_192-HDD-to-SSD-COMPRESSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITMO =AES_192 , CERTIFICADO DO SERVIDOR =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 ( ALGORITHM =AES_192, SERVER CERTIFICATE =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' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test07-AES_256-HDD-to-HDD-COMPRESSION'; BACKUP DATABASE awHDD TO DISK ='E:\backup\test07-AES_256-HDD-to-SSD-COMPRESSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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 (ALGORITHM =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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-to-HDD-COMPRESSION'; BACKUP DATABASE awSSD TO DISK ='E:\ backup\test13-AES_128-SSD-to-SSD-COMPRESSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert), NAME ='test13-AES_128-SSD-to-SSD-COMPRESSION';BACKUP DATABASE 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 (ALGORITHM =AES_128, SERVER CERTIFICATE =TestCert) , NAME ='test14-AES_128-SSD-to-H DD-NO_COMPRESSION';BACKUP DATABASE awSSD TO DISK ='D:\backup\test15-AES_192-SSD-to-HDD-COMPRESSION.bak' WITH INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_192, SERVER CERTIFICATE =TestCert), NAME ='test15-AES_192-SSD-to-HDD-COMPRESSION'; BACKUP DATABASE awSSD TO DISK ='E:\backup\test15-AES_192-SSD-to-SSD-COMPRESSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITMO =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' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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-to-HDD-COMPRE SSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-to-HDD-COMPRESSION';BACKUP DATABASE awSSD TO DISK ='E:\backup\test17 -AES_256-SSD-to-SSD-COMPRESSION.bak' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =AES_256, SERVER CERTIFICATE =TestCert), NAME ='test17-AES_256-SSD-to-SSD-COMPRESSION'; BACKUP DATABASE awSSD TO DISK ='E:\backup\test18-AES_256-SSD-to-SSD-NO_COMPRESSION.bak' WITH INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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 (ALGORITHM =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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY , SERVIDOR 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' COM INIT, COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =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' COM INIT, NO_COMPRESSION, ENCRYPTION (ALGORITHM =TRIPLE_DES_3KEY, SERVER CERTIFICATE =TestCert), NAME ='test20-TRIPLE_DES_3KEY-SSD-to-HDD-NO_COMPRESSION'; 
Eu não precisei fazer nada de especial para cronometrar isso, porque eu poderia extrair todas as estatísticas relevantes do banco de dados msdb depois que elas fossem feitas (a única desvantagem é que a duração é medida apenas para a granularidade de segundos, a menos que eu quisesse para analisar a saída manualmente). Então eu descomentei o EXEC sp_executesql e GO linhas (eu queria executar cada backup 10 vezes para obter médias, descartar anomalias, etc.), apertei F5 e fui trabalhar em uma de minhas sessões para o PASS Summit.

Quando voltei, verifiquei as tabelas msdb para obter os tamanhos/durações de cada backup. Esta consulta é bastante simples:
;WITH x AS( SELECT nome, natural_size =backup_size/1024/1024.0, compact_size =compact_backup_size/1024/1024.0, duração =1.0*DATEDIFF(SECOND, backup_start_date, backup_finish_date) FROM msdb.dbo.backupset WHERE nome 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 nomeORDER BY nome;

Isso me daria os dados que eu precisava para fazer alguns gráficos bonitos.

Impacto no tamanho


Dependendo de sua experiência com criptografia em geral, pode ou não surpreendê-lo que a criptografia de um backup de banco de dados tenha muito pouco impacto em seu tamanho geral. Como isso funciona está além do escopo deste post, com certeza; uma explicação simples seria que - pelo menos com criptografia AES - a compactação não é muito eficaz na maior parte da saída porque é basicamente sem sentido aleatório.

O resultado final é que este gráfico não é muito emocionante. Os tamanhos compactados e não compactados de backups nativos em relação aos quatro métodos de criptografia diferentes:


Tamanho, em MB, dos backups com e sem criptografia

Como você pode ver, houve quase zero impacto no tamanho do banco de dados – cerca de 0,03% de aumento de tamanho para um backup não compactado e um adicional de 0,04% para um backup compactado.

Impacto no desempenho


Embora a criptografia tenha um impacto insignificante no tamanho, ela teve afetar a velocidade do backup. Mas em alguns casos, não da maneira que você pensa. Aqui está a medida geral dos tempos de execução médios para cada abordagem:


Duração média, em segundos, de vários backups

Eu realmente esperava que a criptografia sempre causasse um impacto no desempenho e você deve testar em seu ambiente para ver se seus resultados são diferentes dos meus. Vou voltar e atualizar isso com um novo gráfico mostrando casos particulares que foram surpreendentes para mim e remover alguns valores discrepantes para garantir que os resultados sejam realmente representativos.

Uma advertência


Uma observação importante:você não pode anexar backups criptografados. Se você gerar um arquivo de backup criptografado usando WITH INIT , e tente anexar outro backup criptografado ao mesmo arquivo, você receberá este erro:
Msg 3095, Level 16, State 1, Line 11
O backup não pode ser executado porque 'ENCRYPTION' foi solicitado depois que a mídia foi formatada com uma estrutura incompatível. Para anexar a este conjunto de mídia, omita 'ENCRYPTION' ou crie um novo conjunto de mídia usando WITH FORMAT em sua instrução BACKUP. Se você usar WITH FORMAT em um conjunto de mídia existente, todos os conjuntos de backup serão substituídos.
Msg 3013, Level 16, State 1, Line 11
BACKUP DATABASE está terminando de forma anormal.
Você pode, confusamente, anexar um não - backup criptografado quando o arquivo inicial foi criptografado. Esta não é a intenção, e é um bug que relatei no Connect (#805220, mas atualmente está marcado como privado); espero que eles resolvam isso antes do RTM.

Enquanto isso, você precisa ter cuidado aqui porque nada foi alterado sobre o RESTORE HEADERONLY output para indicar se algum dos backups incluídos foi criptografado. Para descobrir isso, você precisará verificar o BackupSetGUID valor nessa saída em Position = 1 e encontre o backup_set_uuid correspondente valor em msdb.dbo.backupset . Esta tabela tem novas colunas para suportar criptografia, onde você pode obter esta informação:key_algorithm , encryptor_thumbprint e encryptor_type . Isso é problemático nos casos em que você não tem o backupset dados – talvez eles tenham sido apagados durante as tarefas de manutenção, ou talvez você não possa acessá-los porque realmente está se recuperando de um desastre ou só tem o arquivo .bak (ou só tem o arquivo .bak por outros motivos). Nesse caso, espero que haja alguma outra maneira de saber pelo arquivo de backup que ele foi criptografado (e como), mas no momento em que escrevo não conheço uma maneira. Enviei uma sugestão (#805292, também privada) para que a saída de RESTORE HEADERONLY ser aumentado com informações de criptografia da mesma forma que foi aumentado com informações de compactação quando esse recurso foi adicionado no SQL Server 2008.

Quando eles resolverem esses problemas (e estou confiante de que o farão), removerei todo esse ruído, mas é importante estar ciente disso nesse meio tempo, se você for realizar algum teste com os CTPs atuais.

Próximo…


O que esse tipo de backup significa para restauração, voltarei em outro post, quando testar as velocidades de restauração e revelar quaisquer áreas problemáticas lá. Também quero revisitar esses testes para investigar backups de log criptografados.