(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
SQL Server
SQL Server 2 min

Always Encrypted no SQL Server: proteger dados sensíveis end-to-end

João Barros 25 de March de 2026 2 min de leitura

O Always Encrypted é uma funcionalidade do SQL Server (e Azure SQL) que cifra dados sensíveis no lado do cliente, garantindo que o servidor nunca tem acesso às chaves de cifra. Ideal para dados PII, números de cartão e informações médicas.

Arquitectura

Cliente (aplicação)            Servidor SQL
  ├─ Column Master Key (CMK)    ├─ Dados cifrados (ciphertext)
  │   (Azure Key Vault / cert)  ├─ Column Encryption Key (CEK) cifrada
  └─ Driver cifra/decifra       └─ Nunca vê dados em claro

Tipos de cifra

  • Deterministic — mesmo plaintext → mesmo ciphertext. Suporta igualdade e GROUP BY. Mais fácil de atacar por análise de frequência.
  • Randomized — cifra diferente cada vez. Mais seguro. Não suporta pesquisa ou ordenação.

Configurar via SSMS Wizard

-- Após configuração via wizard, a coluna fica cifrada:
-- SSMS com Always Encrypted activado mostra dados em claro
-- Ligação sem a CMK mostra ciphertext binário

-- Verificar colunas cifradas
SELECT
    c.name AS coluna,
    t.name AS tipo,
    c.encryption_type_desc,
    c.encryption_algorithm_name
FROM sys.columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.encryption_type IS NOT NULL;

Usar em aplicação .NET

// Connection string com Always Encrypted
var connStr = "Server=...;Column Encryption Setting=Enabled;";

// O driver cifra automaticamente os parâmetros antes de enviar
using var cmd = new SqlCommand("SELECT * FROM Clientes WHERE nif = @nif", conn);
cmd.Parameters.AddWithValue("@nif", "123456789");  // cifrado pelo driver

Conclusão

O Always Encrypted é a solução mais robusta para proteger dados sensíveis em SQL Server. A cifra acontece no driver do cliente, tornando os dados inacessíveis mesmo a administradores de base de dados com acesso root ao servidor — um requisito cada vez mais comum em auditorias RGPD.

Partilhar: