Segurança de Dados no SQL Server – Parte 03

 

Por: Alexandre Lopes

 

Colocando em prática

Pois bem, iremos fazer o seguinte: Encriptar e decriptar uma coluna usando encriptação simétrica. Utilizando o banco de dados de exemplo do SQL Server (AdventureWorks) iremos adicionar uma coluna chamada "Comentarios" na tabela JobCandidates que utiliza o schema 'HumanResources'. O objetivo é manter os dados do campo "Comments" encriptados. Na prática, a coluna será encriptada usando chave simétrica protegida com certificado digital.

 

Faremos os seguintes passos:

 

1) Criar a infra-estrutura da chave, ou seja, a "database master key", criar o certificado e a chave simétrica;

 

2) Encriptar os dados;

 

3) Decriptar os dados.

 

Utilizaremos o SSMS (SQL Server Management Studio) para realizar as tarefas.

 

Digite o seguinte código para criar a "database master key":

 

USE ADVENTUREWORKS

GO

CREATE MASTER KEY ENCRYPTION BY PASSOWRD = '1234567890'

GO

 

Crie o certificado que iremos utilizar para encriptar a chave simétrica:

 

CREATE CERTIFICATE MeuCertificado

WITH SUBJECT = 'Comentarios do candidato'

GO

CREATE SYMMETRIC KEY ChaveComentario

WITH ALGORITHM = DES

ENCRYPTION BY CERTIFICATE MeuCertificado

GO 

 

Até o momento, o passo 1 foi realizado com sucesso. Vamos agora encriptar e decriptar os dados. Mas antes precisamos incluir o campo 'Comentarios' na tabela JobCandidates:

 

ALTER TABLE HumanResources.JobCandidate

ADD Comentarios varbinary(4000)

GO  

 

O momento agora é crucial, e muitos IT Pros e Developers ficam na dúvida porque não conseguem encriptar seus dados. A solução é simples, antes de se utilizar as funções que citei acima para encriptar e decriptar, é necessário "abrir" a chave utilizando o certificado gerado acima.

 

OPEN SYMMETRIC KEY ChaveComentario

DECRYPTION BY CERTIFICATE MeuCertificado

 

Agora sim iremos fazer uma atualização na coluna 'Comentários' utilizando a função de encriptação:

 

UPDATE HumanResources.JobCandidate

SET Comentarios = EncryptByKey(Key_GUID(´ChaveComentario'), 'Esta informacao será encriptada e decriptada')

 

Consulte a tabela JobCandidate para ver a coluna 'Comentários' encriptada:

 

SELECT JobCandidateID, Comentários FROM HumanResources.JobCandidate

 

Neste momento vem a seguinte pergunta: E agora? como faço para visualizar os dados da coluna 'Comentarios'?

 

Para acessar os dados na coluna encriptada, precisamos decriptar a coluna, mas antes precisamos abrir novamente a chave simetrica usando o certificado:

 

OPEN SYMMETRIC KEY ChaveComentario

DECRYPTION BY CERTIFICATE MeuCertificado

 

SELECT JobCandidateID, CONVERT(VARCHAR, DecryptByKey(Comentários))

FROM HumanResources.JobCandidate

 

Podemos criar uma view para o código acima, tornando mais fácil a sua utilização:

 

CREATE VIEW vJobCandidate

AS

SELECT JobCandidateID, CONVERT(VARCHAR, DecryptByKey(Comentários))

FROM HumanResources.JobCandidate

 

 Desta forma, bastaria utilizar:

 

SELECT * FROM vJobCandidate

 

Conclusão

Com o SQL Server (versões 2005 e 2008), tornou-se prático e acessível a utilização de criptografia para tornar seguro os dados armazenados.

Para completar o conteúdo deste artigo, recomendo enfáticamente a leitura no Books Online dos seguintes tópicos:

 

BACKUP SERVICE MASTER KEY

RESTORE SERVICE MASTER KEY

ALTER SERVICE MASTER KEY

CREATE MASTER KEY

CREATE CERTIFICATE

CREATE SYMMETRIC KEY

OPEN SYMMETRIC KEY

 

Links

http://www.microsoft.com/sql/default.mspx

http://technet.microsoft.com/en-us/sqlserver/default.aspx

http://msdn2.microsoft.com/pt-br/sql/default.aspx