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