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').