Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Entendendo o SQL Server Always Encrypted

A segurança é um dos requisitos mais importantes para um sistema orientado a dados. A criptografia é uma das maneiras de proteger os dados. A Wikipedia define criptografia como:

Criptografia é o processo de codificação de uma mensagem ou informação de forma que apenas as partes autorizadas possam acessá-la e aqueles que não estão autorizados não podem.

No SQL Server 2016, a Microsoft introduziu um recurso de criptografia chamado Always Encrypted . Neste artigo, veremos o que Sempre Criptografado é, e como ele pode ser usado para criptografar e descriptografar dados, com a ajuda de exemplos simples.


O que é o SQL Server Always Encrypted?

Sempre criptografado é um recurso de segurança que permite que o aplicativo cliente gerencie as chaves de criptografia e descriptografia, garantindo assim que apenas o aplicativo cliente possa descriptografar e usar dados confidenciais.

Existem várias técnicas de criptografia, mas não são tão seguras quanto Always Encrypted . Por exemplo, a criptografia de chave simétrica é usada para criptografar dados no lado do banco de dados. Uma desvantagem dessa abordagem é que, se qualquer outro administrador de banco de dados tiver a chave de descriptografia, ele poderá acessar os dados.

Por outro lado, no caso de Sempre Criptografado , os dados são criptografados no lado do cliente e o servidor de banco de dados recebe uma versão criptografada dos dados. Portanto, os dados não podem ser decifrados no final do banco de dados. Somente o cliente que criptografou os dados pode descriptografá-los.

Tipos de chave

O recurso Always Encrypted do SQL Server usa dois tipos de chaves:

  • Chave de criptografia de coluna (CEK)

Sempre é colocado no servidor de banco de dados. Os dados são realmente criptografados usando a coluna CEK. No entanto, se alguém no banco de dados tiver acesso ao CEK, ele poderá descriptografar os dados.

  • Chave mestra de coluna (CMK)

Esta chave é colocada no lado do cliente ou em qualquer armazenamento de terceiros. A CMK é usada para proteger a CEK, adicionando uma camada adicional de segurança. Quem tiver acesso à CMK pode realmente descriptografar a CEK, que pode ser usada para decifrar os dados reais.

Tipos de criptografia

  • Determinístico

Esse tipo de criptografia sempre gerará texto criptografado semelhante para o mesmo tipo de dados. Se você deseja implementar a pesquisa e o agrupamento em uma coluna da tabela, use a criptografia determinística para essa coluna.

  • Aleatório

A Criptografia Randomizada irá gerar texto criptografado diferente para o mesmo tipo de dados, sempre que você tentar criptografar os dados. Use criptografia aleatória se a coluna não for usada para agrupamento e pesquisa.

Configurando Sempre criptografado Usando SSMS

Podemos configurar o SQL Server Always Encrypted via SSMS. Mas antes disso, precisamos criar um banco de dados e adicionar uma tabela ao banco de dados. Execute o seguinte script para fazer isso:

CREATE DATABASE School

Use School
CREATE TABLE Student  
(  
   StudentId int identity(1,1) primary key,  
   Name varchar(100),  
   Password varchar(100) COLLATE Latin1_General_BIN2 not null,  
   SSN varchar(20)  COLLATE Latin1_General_BIN2 not null
)

No script acima, criamos um novo banco de dados chamado School . O banco de dados tem quatro colunas:StudentId , Nome , Senha e SSN . Você pode ver que as colunas Senha e SSN têm um COLLATE. É necessário especificar o COLLATE para a coluna que você deseja Sempre Criptografada . O tipo de criptografia é especificado como “Latin1_General_BIN2”.

Vamos agora primeiro tentar adicionar dois registros na tabela Aluno.

insert into Student ( Name, Password, SSN)
VALUES ('John','abc123', '451236521478'),
('Mike','xyz123', '789541239654')

Neste momento, não configuramos Sempre criptografado em qualquer uma das colunas da tabela Aluno, portanto, se você tentar selecionar os registros da tabela Aluno, verá os valores de dados reais em vez dos valores criptografados. Execute a seguinte consulta para selecionar registros:

SELECT * FROM Student

A saída fica assim:


Vamos agora configurar o SSMS para habilitar Always Encrypted . Como dissemos anteriormente, Sempre criptografado cria chaves de criptografia de coluna e chaves mestras de coluna.

Para ver as chaves de criptografia de coluna e as chaves mestras de coluna existentes, para o School Database, vá para Databases -> School -> Security -> Always Encrypted Keys conforme mostrado na figura a seguir:


Como você não tem nenhum registro criptografado no conjunto de dados, não verá nenhuma CEK ou CMK na lista.

Vamos agora habilitar a criptografia nas colunas Senha e SSN da tabela Aluno. Para fazer isso, clique com o botão direito do mouse em Bancos de Dados -> Escola. No menu suspenso, selecione Criptografar colunas opção conforme a figura abaixo:


Clique em Avançar botão na Introdução janela. Na Seleção de colunas janela, verifique as colunas Senha e SSN. Para a coluna Senha, selecione o tipo de criptografia como Aleatório . Para a coluna SSN, escolha Deterministic . Isso é mostrado na captura de tela a seguir:


Clique em Avançar botão na Configuração da chave mestra janela. Por padrão, a chave mestra é armazenada na máquina cliente conforme mostrado abaixo:


Clique em Avançar botão em Configurações de execução e o Resumo janelas. Se tudo correr bem, você deverá ver os seguintes Resultados janela.


Agora, se você for novamente para Databases -> School -> Security -> Always Encrypted Keys, deverá ver a CEK e a CMK recém-criadas, conforme mostrado na figura a seguir:


Agora tente selecionar registros da tabela Aluno.

SELECT * FROM Student

A saída se parece com isso.



Na saída, você pode ver que as colunas Senha e SSN foram criptografadas.

Recuperando dados descriptografados


A consulta SELECT retornou dados criptografados. E se você quiser recuperar dados descriptografados? Para fazer isso, crie uma Nova Janela de Consulta no SSMS e clique no botão Alterar Conexão ícone na parte superior do Pesquisador de Objetos, conforme mostrado na figura a seguir:



A janela de conexão do SQL Server será exibida. Selecione Opções botão no canto inferior direito, como mostrado abaixo:


Na janela exibida, clique em Parâmetros de conexão adicionais guia no canto superior esquerdo e digite “Column Encryption Setting =Enabled” na caixa de texto, conforme mostrado na captura de tela a seguir. Por fim, clique no botão Conectar botão.


Agora execute novamente a seguinte consulta SELECT:

SELECT * FROM Student

Nos resultados, você verá os registros retornados de forma descriptografada conforme mostrado abaixo:


Conclusão

Sempre E criptografado é um dos recursos de segurança mais recentes do SQL Server. Neste artigo, revisamos brevemente o que Sempre E criptografado é e como habilitá-lo usando o SQL Server Management Studio. Também vimos um exemplo básico de criptografia e descriptografia de dados usando Sempre E criptografado característica.