Segurança de Dados no SQL Server – Parte 01

 

Por: Alexandre Lopes

 

Introdução

Neste artigo irei demonstrar uma característica existente no SQL Server versões 2005 e 2008: 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 não se faz mais necessário utilizar soluções de terceiros para encriptar/decriptar dados.

Infra-Estrutura de segurança

O SQL Server 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 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 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 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').