Olá! Seja bem-vindo!
Com a expansão das leis de proteção de dados (ex: GDPR e LGPD) e dos serviços em cloud, temos sido cada vez mais demandados pela implementação de estratégias que assegurem o sigilo das informações.
Nesse contexto, dominar proteção de dados no contexto do banco de dados tornou-se habilidade fundamental para técnicos que ganham como diretores nas áreas de desenvolvimento e DBA.
Por isso, no vídeo de hoje, veremos as diferenças e a aplicação prática das 3 principais metodologias de proteção de dados no contexto do SQL Server: Anulação, mascaramento e criptografia de dados.
Assista aqui ao vídeo de demonstração:
ANULAÇÃO DE DADOS
Anular dados consiste em literalmente torna-los inválidos, ou seja, uma vez que o dado foi anulado, não há mais como retorna-lo a sua forma legível original!
Essa técnica é bastante útil quando você precisa enviar seu banco de dados SQL completo a um fornecedor para diagnóstico de problemas, ou para alguém que fará analises estatísticas das informações, as quais não necessitam de detalhes particulares de um cliente ou outro.
Uma forma simples de você anular dados é simplesmente substitui-los por alguma informação sequencial ou aleatória, por exemplo, trocando nomes e CPFs pelo resultado da função newid() – que gera dados aleatórios.
MASCARAMENTO DE DADOS
Mascarar dados consiste em ocultar a informação sigilosa de usuários que NÃO tenham o direito de visualizá-la.
Diferente do processo de anular, uma informação mascarada pode ser desmascarada / lida, desde que o usuário tenha direito para fazê-lo. Uma informação anulada, como vimos anteriormente, não pode ser desanulado.
Uma forma bem prática de mascarar informações do seu banco SQL é utilizando o recurso chamado DDM ou “Dymanic Data Masking”, pois é simples ativa-lo e a utilização dele por aplicativos externos exige muito pouca alteração de código.
O processo basicamente consiste em configurar o mascaramento na tabela, usando a propriedade MASKED WITH, e fornecer a quem não tem acesso as informações um usuário do SQL sem a permissão de desmascarar os dados (permissão UNMASK do SQL).
IMPORTANTE: Não adianta mascarar os dados de sua base e enviá-la a alguém achando que essa pessoa não conseguirá desmascarar, pois qualquer pessoa que seja administrador do banco SQL, sempre terá o direito de UNMASK.
CRIPTOGRAFIA DE DADOS
Criptografar dados consiste em restringir o acesso as informações APENAS a pessoas que atendam 2 critérios: Acesso de visualização dos dados E chave para descriptografar os dados.
Diferente do mascaramento, visualizar os dados depende da posse da chave, logo, mesmo você sendo um DBA com acesso completo as tabelas, você NÃO conseguirá ler dados sigilosos a menos que possua a chave para descriptografar!
Criptografar informações é uma técnica sensacional para quem fornece softwares em nuvem/cloud, pois cada um de seus clientes pode ter sua própria chave, e você, provedor do software, não precisa dela para administrar os dados.
Implementar uma estratégia como essa isenta você de problemas relacionados a vazamento de informações (como você não tem a chave para ver os dados, não há como o vazamento ter partido de você, certo?).
Esse certamente é um benefício bem interessante em uma época onde se fala de multas milionárias para casos dessa natureza.
Conclusão
Sempre fui interessado em segurança da informação. Em minha experiência, historicamente, as organizações mais ou menos negligenciam a segurança de nossos dados “como clientes”, confere?
Praticamente todos já tivemos dados vazados, e por isso vejo as leis de proteção de dados como positivas para nós como cidadãos, sem falar na oportunidade que elas trazem para quem trabalha em desenvolvimento de software e banco de dados.
Seja através da anulação, mascaramento ou criptografia, hoje temos em mãos estratégias e tecnologias para protegermos os dados de nossos clientes e garantirmos segurança jurídica para as empresas onde atuamos.
Abraço do seu amigo Josué
Script da aula
---------------------------------------------------------------------------------------------------- -- Anulação vs Mascaramento vs Criptografia ---------------------------------------------------------------------------------------------------- -------------------------------------------------- -- Banco de testes -------------------------------------------------- use master go if db_id('curso') is not null begin alter database curso set single_user with rollback immediate drop database if exists curso end go create database curso go use curso go -------------------------------------------------- -- Anulação -------------------------------------------------- -- O que é: Invalidar o dado de forma irreversível! -- Exemplo: Enviar um banco completo a um fornecedor para diagnóstico de problemas, porém evitando que ele tenha acesso aos dados sensíveis de cliente. -- Fluxo: Bkp em PRD > restore em HML > anulação de dados em HML > bkp em HML (com dados anulados) > envio da base anulada para o fornecedor -- Tabela para testes drop table if exists clientes go create table clientes ( id smallint not null identity(1,1) constraint pk_clientes primary key, nm varchar(1000) not null, cartao varchar(1000) not null, profissao varchar(100) not null, ultima_compra datetime not null ) insert into clientes (nm, cartao, profissao, ultima_compra) values ('Free William de Castro', '12345678900', 'Mergulhador', '2020-01-01'), ('Dolores Fuertes', '12345678901', 'Farmaceutica', '2020-02-20'), ('Colapso Cardiaco de Amorim', '12345678902', 'Cardiologista', '2020-03-10'), ('Sugiro Kifuja', '12345678903', 'Advogado', '2020-03-10'), ('Mainframe da Cunha', '12345678904', 'Desenvolvedor', '2020-03-10') go -- Anulação de dados dos clientes -- Dado original select * from clientes -- Anulação: update clientes set nm = newid(), cartao = newid() -- Dado anulado select * from clientes -------------------------------------------------- -- Mascaramento -------------------------------------------------- -- O que é: Restringir acesso a pessoas com "direito de acesso". Exemplo usando o DDM. -- Exemplo: Time de analises gerenciais não necessita ver os dados dos clientes, apenas seus volumes de operações -- Fluxo: Configuração do mascaramento (PRD ou HML) > configurações de acesso -- Tabela para testes drop table if exists clientes go create table clientes ( id smallint not null identity(1,1) constraint pk_clientes primary key, nm varchar(1000) not null, cartao varchar(1000) not null, profissao varchar(100) not null, ultima_compra datetime not null ) insert into clientes (nm, cartao, profissao, ultima_compra) values ('Free William de Castro', '12345678900', 'Mergulhador', '2020-01-01'), ('Dolores Fuertes', '12345678901', 'Farmaceutica', '2020-02-20'), ('Colapso Cardiaco de Amorim', '12345678902', 'Cardiologista', '2020-03-10'), ('Sugiro Kifuja', '12345678903', 'Advogado', '2020-03-10'), ('Mainframe da Cunha', '12345678904', 'Desenvolvedor', '2020-03-10') go -- Configuração do mascaramento usando o DDM: alter table clientes alter column nm add masked with (function = 'partial(5, "******", 3)') alter table clientes alter column cartao add masked with (function = 'partial(2, "******", 3)') -- Configuração de acesso create user teste without login grant select on clientes to teste -- Usuário teste NÃO tem acesso UNMASK, necessário para desmascarar os dados -- Validação do procedimento: execute as user='teste' -- executa comandos com o usuário teste, que não tem acesso select * from clientes -- select com usuário teste - dado mascarado revert -- retorna para o contexto do usuário admin select * from clientes -- executa select com usuário admin - dado desmascarado go -------------------------------------------------- -- Criptografia -------------------------------------------------- -- O que é: Restringir acesso a pessoas com "direito de acesso" e "chave de acesso". Exemplo usando cell level encryption com senha (chave de acesso). -- Exemplo: Proteger dados do sistema mesmo de administradores e times de TI -- Fluxo: Configuração da criptografia > Delegação da chave de acesso -- Tabela para testes drop table if exists clientes go create table clientes ( id smallint not null identity(1,1) constraint pk_clientes primary key, nm varchar(1000) not null, cartao varchar(1000) not null, profissao varchar(100) not null, ultima_compra datetime not null ) insert into clientes (nm, cartao, profissao, ultima_compra) values ('Free William de Castro', '12345678900', 'Mergulhador', '2020-01-01'), ('Dolores Fuertes', '12345678901', 'Farmaceutica', '2020-02-20'), ('Colapso Cardiaco de Amorim', '12345678902', 'Cardiologista', '2020-03-10'), ('Sugiro Kifuja', '12345678903', 'Advogado', '2020-03-10'), ('Mainframe da Cunha', '12345678904', 'Desenvolvedor', '2020-03-10') go -- Criptografando os dados: declare @senha varchar(100) = 'senha_criptografia' update clientes set nm = EncryptByPassPhrase(@senha, nm), cartao = EncryptByPassPhrase(@senha, cartao) go -- Mostrando os dados criptogradados (mesmo sendo o DBA, você não tem acesso ao dado se não possuir a chave/senha) select * from clientes go -- Mostrando os dados decriptografados (necessário possuir a senha, certificado de acesso ou outra chave que você usou para configurar...) declare @senha varchar(100) = 'senha_criptografia' select id, convert(varchar, DecryptByPassPhrase(@senha, nm)) as nm, convert(varchar, DecryptByPassPhrase(@senha, cartao)) as cartao, profissao, ultima_compra from clientes go -------------------------------------------------- -- DICAS -------------------------------------------------- /* == RESUMO: Anulação = Invalida o dados de forma irreversível. Mascaramento = Oculta o dado. É possível desmascarar se tiveres direito! Criptografia = Oculta o dado. É possível descriptografar se tiveres direito e chave de acesso! == VEJA TAMBÉM: Armazenar senhas no SQL: http://dba-pro.com/gerenciar-senhas-com-seguranca-no-sql-server/ Senhas + sal e pimenta: https://dba-pro.com/salgando-e-apimentando-senhas/ */