SQL Server 2008 – TDE

Uma das muitas novidades da nova versão do SQL Server 2008 é o Transparent Data Encryption (TDE para os íntimos).

Legal… mas o que é o TDE?

O TDE é uma nova funcionalidade de criptografia dos dados. Ela não foi criada para substituir a criptografia em colunas que já existia no SQL Server 2005 - o TDE não vai impedir que um usuário com acesso de leitura ao banco veja os dados na tabela. Ao invés disso, vai implementar criptografia nos dados, a nível de disco, nos arquivos MDF e LDF. E por que isso é útil? Existem inúmeras situações onde essa funcionalidade é muito útil, mas vamos imaginar uma bem simples: você é o DBA em uma grande empresa e cria um sistema de backup perfeito, e o banco de dados contém informações muito importantes para a empresa, como por exemplo financeiras e estratégicas. No seu plano de backup, você definiu que uma cópia do backup será armazenada em um datacenter externo, por questão de segurança (nunca se sabe quando um avião vai cair no seu prédio, mas é bom estar preparado). Perfeito! Agora você tem uma cópia externa dos dados, e também um sério problema de segurança, pois você não tem como garantir a segurança do backup externo. Teoricamente, qualquer um (com acesso ao datacenter) pode copiar o seu arquivo de backup, restaurar em outro servidor e ter acesso a todos os dados confidenciais da sua empresa. Nesse momento entra o TDE, criptografando os seus arquivos e impedindo que qualquer um sem as chaves corretas (inclusive você) restaure esse banco.

É importantíssimo levar em consideração que, quando habilitamos o TDE no banco, aumentamos a carga no disco (I/O) e além disso precisamos começar a ter um cuidado todo especial com relação aos certificados e a chave de criptografia do nosso servidor. Imaginem a situação:

Você habilita o TDE no seu banco, e tudo está funcionando perfeitamente. Você é um cara precavido e tem uma rotina de backup quase perfeita, você tem backup completo, diferencial e do log de transações de todas as suas bases. Um certo dia o servidor de banco morre… Você agradece aos céus por ter backup de tudo, sobe um servidor reserva que você já tinha preparado para esse momento especial. Então você tenta restaurar as suas bases e recebe uma mensagem de erro dizendo que não é possível restaurar a base de dados porque o certificado usado para criptografar o mesmo não foi encontrado! Qual é a sua reação?

(A) Dá risada da situação;

(B) Chora;

(C) Foge para outro país;

(D) Todas as alternativas anteriores;

Por isso, lembre-se: faça backup do certificado!

Outro fator importante a ser levado em consideração: quando habilitamos o TDE em qualquer base de dados, automaticamente o TDE é habilitado também para o banco de dados tempdb. Esta não é uma opção que possa ser desabilitada. Isso acontece porque o sql server faz um uso intensivo dessa base de dados para realizar praticamente todas as atividades internas. Imaginem que o tempdb é como se fosse uma extensão da memória do servidor. Por isso, mesmo bases de dados que não usem o TDE vão ter uma queda na performance, já que o tempdb é único por instância do sql server.

Mas chega de falar de coisa ruim - vamos ver como usar o TDE na prática:

1º passo: caso você nunca tenha criado a master key encryption antes, vai precisar criar agora. A master key encryption é uma chave simétrica, usada para proteger as chaves privadas dos certificados e as chaves assimétricas. Para isso, usaremos o seguinte comando:

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD
= 'My Password'
GO

PS: lembrem de não esquecer essa senha, ela é importante ;)

2º passo: criar um certificado. Neste passo podemos tanto criar um certificado no próprio SQL Server quanto importar um certificado comprado em alguma entidade. A chave privada desse certificado vai ser protegida pela master key que acabamos de criar:

USE master;
GO
CREATE CERTIFICATE
TDECert WITH SUBJECT='TDE Certificate';
GO

3º passo: criar uma chave de criptografia para a base de dados, usando o certificado criado anteriormente. Neste passo podemos escolher o algoritmo de criptografia que queremos usar: triple DES, AES 128, AES 192 ou AES 256:

USE AdventureWorks;
GO
CREATE DATABASE ENCRYPTION KEY 
WITH ALGORITHM = AES_256 
ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO

Para ajudar a refrescar a sua memória, este comando vai retornar um Warning. Lembrando que devemos fazer um backup de nosso certificado imediatamente! Então vamos lá:

USE master;
GO
BACKUP CERTIFICATE TDECert 
TO FILE = 'c:\backup\adv_certificate.cer'
WITH PRIVATE KEY( FILE = 'c:\backup\adv_certkey.pvk', 
          ENCRYPTION BY PASSWORD = 'My Password');

4º passo: finalmente, só nos resta habilitar o TDE na nossa base:

ALTER DATABASE AdventureWorks
SET ENCRYPTION ON;
GO

Para verificar o andamento da criptografia, vocês podem usar esse comando:

SELECT DB_NAME(e.database_id) AS DatabaseName, 
            e.database_id, 
            e.encryption_state, 
    CASE e.encryption_state 
                WHEN 0 THEN 'No database encryption key present, no encryption' 
                WHEN 1 THEN 'Unencrypted' 
                WHEN 2 THEN 'Encryption in progress' 
                WHEN 3 THEN 'Encrypted' 
                WHEN 4 THEN 'Key change in progress' 
                WHEN 5 THEN 'Decryption in progress' 
    END AS encryption_state_desc, 
            c.name, 
            e.percent_complete 
    FROM sys.dm_database_encryption_keys AS e 
    LEFT JOIN master.sys.certificates AS c 
    ON e.encryptor_thumbprint = c.thumbprint 

Ok…alguem chegou até esse ponto? Ótimo, agora que já vimos como fazer tudo isso via t-sql eu vou contar uma novidade. É possível fazer tudo isso visualmente também, usando o Sql Server Management Studio. Para isto, basta clicar com o botão direito no banco de dados, ir em Tasks > Manage Database Encryption. Escolha na lista o nível de criptografia, o certificado (isso vocês tem que criar na mão mesmo), selecione Set Database Encryption On e apertem Ok. Mas vocês tem que concordar… usando t-sql é muito mais divertido ;)

See ya, folks! 

9 Comments

Comments have been disabled for this content.