Título da coluna

Propaganda
Segurança de Dados
no SQL Server 2005
Por Alexandre Rodrigues Lopes
Data de criação: 23/07/2007
Resumo
O SQL Server 2005 fornece uma infra-estrutura para
segurança de dados, uma característica não existente em
versões anteriores. Disponivel em todas as edições (Express,
Standard, Workgroup, Developer e Datacenter).
Observação importante
Este artigo técnico foi escrito por um membro da comunidade brasileira e não é um
documento oficial Microsoft. A Microsoft Corporation e a Microsoft Brasil não
fornecem quaisquer garantias, explícitas ou expressas, sobre o conteúdo deste
documento, nem concorda necessariamente com opiniões pessoais dos colunistas,
bem como não se responsabiliza por danos causados por procedimentos técnicos
descritos nestas colunas.
Coluna escrita por membro da comunidade TechNet
- Página 1 de 6
Este artigo aplica-se aos seguintes produtos e tecnologias:

SQL Server 2005 (Express, Standard, Workgroup, Developer e Datacenter).
Introdução
Neste artigo irei demonstrar uma característica nova do SQL Server 2005: O
armazenamento dos dados de forma segura. Tenho notado que os IT Pros e
Developers possuem muitas dúvidas sobre esse tema e irei demonstrar como é
extremamente simples e seguro. No SQL Server 2005 não se faz mais necessário
utilizar soluções de terceiros para encriptar/decriptar dados.
Infra-Estrutura de segurança
O SQL Server 2005 fornece uma infra-estrutura para encriptação de dados, um
nivel de segurança não existente em versões anteriores do SQL Server. Essa nova
característica encontra-se disponivel em todas as edições do produto (Express,
Standard, Workgroup, Developer e Datacenter).
Voce pode encriptar dados utilizando chaves simétrica ou assimétrica e certificados.
Encriptação de dados é uma nova feature bastante bem vinda pela comunidade que
anteriormente, era obrigada a recorrer a software de terceiros ou desenvolver suas
próprias stored procedures para encriptar e decriptar os dados.
O lado negativo, fica para o alto impacto na performance, devido ao 'overhead' no
processo.
Essa nova feature do SQL Server 2005 trabalha baseado no "service master key"
que é uma chave simétrica gerada automáticamente quando a instancia do SQL
Server é instalada (instancias default e nomeadas). Ela só pode ser aberta pelo
usuário que inicializou o serviço do SQL Server.
O "engine" do banco de dados utiliza a "service master key" para encriptar senhas
no linked server, string de conexões, contas de usuários e a "master key" dos
bancos de dados.
Existe a possibilidade de ter um backup da "service master key" ? Sim, voce pode
gerenciar o backup e restore usando as seguintes linhas de código:
BACKUP SERVICE MASTER KEY TO FILE = ENCRYPTION BY PASSWORD = 'password'
RESTORE SERVICE MASTER KEY FROM FILE = DECRYPTION BY PASSWORD = 'password'
Para recriar a chave:
ALTER SERVICE MASTER KEY REGENERATE
Lembrando sempre que apenas o SA ou usuários com permissão de sysadmin
podem utilizar as linhas de código acima. É extremamente recomendável realizar
um backup em mídia e envia-lo para local seguro.
Como se trata de uma hierarquia de chaves de encriptação, o próximo nível é o
"database master key" que, como o próprio nome diz, trabalha a nivel de banco de
Coluna escrita por membro da comunidade TechNet
- Página 2 de 6
dados. Voce pode criar uma chave simetrica no nivel do banco de dados para
encriptar certificados e chaves. O 'database master key' é criando usando a
seguinte linha de código (atente para o fato de estar posicionado no banco de
dados no qual deseja trabalhar com os dados encriptados):
USE ADVENTUREWORKS
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ´password´
O armazenamento do 'database master key' é realizado no banco de dados master
e a chave é encriptada usando o 'service master key'. A outra cópia é armazenada
no banco de dados (no exemplo acima, em 'ADVENTUREWORKS').
Segurança à nível de dados
O próximo nivel na hierárquia, é a encriptação a nivel da dados, que fornece duas
opções de encriptação: chave simétrica e chave assimétrica.
Uma chave simétrica é um mecanismo de encriptação mais rápido para encriptar e
decriptar dados. Voce pode utilizar chave simétrica para dados que são
constantemente acessados. A linha de código abaixo é um exemplo de criação da
chave simétrica:
CREATE SYMMETRIC KEY WITH ALGORITHM = AES_256 ENCRYPTION BY PASSWORD
= 'password'
O uso da senha não é obrigatório e recomendado, imagine utilizar a linha de código
acima em diversas aplicações? A senha ficaria exposta o que poderia causar
vulnerabilidade. Utilizarei neste artigo apenas para repassar ao leitor todas as
funcionalidades disponiveis e como utiliza-las.
O algoritmo utilizado acima (AES_256) não é o unico, voce utilizar o DES e o
TRIPLE_DES que fornecem uma chave mais "forte". Para maiores informações
sobre algoritmos, consulte o books online do SQL Server 2005.
A partir do momento que voce criou uma chave a nivel de dados, chegou o
momento de encriptar e decriptar seus dados. Utiliza-se as funções EncryptByKey e
DecryptByKey no caso de chave simétrica.
A chave assimétrica é a combinação de uma chave privada com uma chave pública.
É considerada muito mais "forte" que uma chave simétrica, mas por outro lado,
consome mais recursos do sistema. A linha de código abaixo é um exemplo da
criação de chave assimétrica:
CREATE ASSYMETRIC KEY WITH ALGORITHM = RSA_2048 ENCRYPTION BY
PASSWORD = ´password´
Os algoritmos utilizados podem ser RSA_512, RSA_1024 e RSA_2048.
Para encriptar e decriptar dados, utiliza-se as funções EncryptByAsmKey e
DecryptByAsmKey.
Coluna escrita por membro da comunidade TechNet
- Página 3 de 6
Certificado Digital
Certificado Digital é o mecanismo mais "forte" disponivel no SQL Server 2005. Um
certificado de chave publica é assinado digitalmente e associado uma uma
identidade de usuário, dispositivo ou serviço que armazena a chave privada. Ou
seja, a chave publica, como o próprio nome informa é de conhecimento publico e
serve para decriptar, a chave privada faz o inverso; decripta. Esse modelo é
amplamente utilizado e segue as normas X.509. Por ser extremamente seguro, o
impacto na performance também é sentida devido ao overhead quando se encripta
e decripta os dados. A linha de código abaixo é um exemplo de criação do
certificado:
CREATE CERTIFICATE WITH SUBJECT = 'subject_do_certificado'
As funções utilizadas são EncryptByCert e DecryptByCert.
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 nos estudos.
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
Coluna escrita por membro da comunidade TechNet
- Página 4 de 6
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
Coluna escrita por membro da comunidade TechNet
- Página 5 de 6
Links Relacionados

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
Conclusão
Com o SQL Server 2005, 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
Alexandre Lopes atua como consultor especialista em SQL Server em projetos da Y2K-TI. Possui mais de
10 anos de experiência na área de TI, sendo certificado Microsoft com os títulos MCT, MCSE e MCDBA.
Como instrutor MCT (Microsoft Certified Trainer) possui cerca de 4.200 horas ministrando treinamento
oficial Microsoft. http://arodrigueslopes.spaces.live.com
Coluna escrita por membro da comunidade TechNet
- Página 6 de 6
Download