AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 23786
Accepted
Sky
Sky
Asked: 2012-09-06 21:57:00 +0800 CST2012-09-06 21:57:00 +0800 CST 2012-09-06 21:57:00 +0800 CST

Ofuscação de dados no SQL Server

  • 772

Qual é a melhor prática para ofuscação de dados no SQL Server?

Gostaríamos de usar dados de produção mascarados em nosso sistema UAT.

Se quisermos fazê-lo rapidamente e com um nível mais alto de obscurecimento, qual abordagem deve ser adotada? Estou pensando no personagem lutando pelo nome e sobrenome das pessoas, mas como? Devo criar uma função eu mesmo ou há alguma função predefinida disponível para uso? Não quero perder tempo reinventando a roda :)

Que tal para campos de data? Por exemplo, a data de nascimento deve ser escolhida aleatoriamente de toda a tabela e atribuída a um registro, ou há uma maneira melhor de fazer isso?

sql-server sql-server-2008-r2
  • 5 5 respostas
  • 30792 Views

5 respostas

  • Voted
  1. Best Answer
    World Wide DBA
    2012-09-06T23:27:12+08:002012-09-06T23:27:12+08:00

    Eu gostaria de poder te dar 100 pontos só por pensar nisso! Eu vi este assunto negligenciado tantas vezes que é falso - tão bem feito. Pelo que entendi, você realmente deseja embaralhar os dados nos próprios campos e, embora eu entenda o que você está tentando alcançar, pode não ser necessário fazê-lo - embora deva ser considerado caso a caso.

    A maioria das leis de proteção de dados gira em torno da capacidade de associar corretamente um dado a um indivíduo - por exemplo, uma data de nascimento ou um número de telefone. Você pode atender aos requisitos da lei garantindo que, ao mover seus dados da produção para o UAT, eles sejam misturados para que não sejam facilmente mapeados novamente para a pessoa original - especialmente quando você mistura nomes próprios e sobrenomes.

    No entanto, isso não resolve o problema, por exemplo, de, digamos, detalhes de contato. Você pode atender aos requisitos da lei misturando os dados, mas os números de telefone ainda são reais, os e-mails ainda são reais etc... eles apenas não são atribuídos à pessoa correta. Para isso, recomendo, se possível, limpar esses dados antes de passá-los para o UAT, o Red Gate faça um software chamado Data Generator que pode criar dados de teste aleatórios para você, para que você possa repovoar os campos com dados que podem ser testados.

    Quanto ao embaralhamento de dados: existem muitos aplicativos que fazem isso para você e, honestamente, você está certo em não querer reinventar a roda. O que usamos em nossa empresa é um produto chamado Data Masker de uma empresa chamada Net2000. A licença é bem barata, funciona extremamente rápido e você não precisa se preocupar em desabilitar todas as suas restrições antes de embaralhar o banco de dados.

    Você pode, é claro, lançar sua própria solução caso não encontre nada que atenda aos seus requisitos - se você decidir fazer isso, eu recomendo fortemente usar procedimentos CLR para fazê-lo, pois é muito mais flexível do que TSQL puro (para não dizer que você não pode usar TSQL veja aqui ).

    Depois de escolher um aplicativo para fazer isso para você, a próxima coisa que você precisa decidir é o que você realmente quer/precisa embaralhar? Honestamente, seu melhor recurso para isso é a equipe jurídica da sua empresa e/ou os auditores da empresa. Eu sei que às vezes podemos não gostar de trabalhar com eles, mas eles serão muito mais legais com você por abordá-los e fazer a pergunta, em vez de tentar fazer isso sozinho e errar, não há absolutamente nada de errado em pedir ajuda - especialmente quando é tão importante quanto isso.

    Espero que isso ajude você e desejo-lhe boa sorte em sua busca... ;-)

    • 30
  2. datagod
    2012-09-07T05:38:45+08:002012-09-07T05:38:45+08:00

    O Sr. Brownstone acertou em cheio. Agora, para ajudá-lo um pouco, aqui está minha função "garble", usada para ofuscar strings (resultados engraçados com nomes!). Passe uma string, ela retorna uma string distorcida. Inclua-o em instruções de atualização em colunas de string. Altere o comprimento dos dados como achar melhor.

    ---------------------
    -- Garble Function --
    ---------------------
    -- Make a function to slightly garble the strings
    IF (object_id('fn_Garble') is not null)
      drop function fn_Garble
    go
    create function fn_Garble
    (
      @String varchar(255)
    )  
    returns varchar(255)
    as
    BEGIN
      select @String = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@String,'o','e'),'a','o'),'i','a'),'u','i'),'t','p'),'c','k'),'d','th'),'ee','e'),'oo','or'),'ll','ski')
      return @String
    END
    go
    
    • 12
  3. user9164
    2012-09-07T05:06:16+08:002012-09-07T05:06:16+08:00

    Eu tive que fazer isso para os dados de vendas no varejo dos meus clientes. Para nomes, fui ao censo e baixei todos os nomes e sobrenomes, executei-os em um loop para juntar cada primeiro a cada último, adicionei o código de sexo e o carreguei em uma tabela em letras maiúsculas. Eu então tinha uma tabela com cerca de 400 milhões de nomes únicos. Usei letras maiúsculas, pois nossos dados atuais não estavam em letras maiúsculas, para que eu pudesse informar mais facilmente os dados que foram apagados.

    Quando limpei meus dados de usuário, troquei os nomes, para aniversário, coloquei todos em 1º de janeiro do ano em que realmente nasceram e atualizei todos os números de telefone com seu código postal (meus dados eram apenas nos EUA). Os endereços de e-mail tornaram-se a inicial mais o sobrenome @mycompany.co. O endereço postal me deu mais dor, mas mantive a cidade, estado e CEP porque acredito que eles não sejam um problema se o endereço for alterado. Eu tinha um colega de trabalho que tinha algum programa que gerava letras ilegíveis e atualizava a linha de endereço com isso.

    Em qualquer lugar que eu tinha dados duplicados, mas ainda tinha um FK para o usuário principal (design ruim sim, mas não meu), atualizei esses dados também para que o nome fosse consistente em todo o banco de dados para o usuário x.

    No geral, meus dados ainda eram muito legíveis, embora o endereço não fizesse sentido. Levei alguns dias para fazer tudo isso funcionar, mas uma vez que foi feito e um trabalho de agente sql foi criado, eu pude limpar os dados em menos de 15 minutos.

    • 8
  4. cmcapellan
    2016-01-27T12:19:12+08:002016-01-27T12:19:12+08:00

    Para ofuscar um único campo, que tal usar a função HASHBYTES (no SQL 2008+)? Você pode escolher seu algoritmo (MD5 provavelmente é suficiente) desde que salgue seus dados. Então, em vez de apenas SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD>) certificar-se de que você faz SELECT HASHBYTES('SHA2_256', <LAST NAME FIELD> + '<my salt string>')e agora você tem um hash que não pode ser facilmente forçado.

    É uma função real que é suportável, repetível e provavelmente muito mais rápida. Dependendo de quanto você precisa para realmente proteger versus apenas ofuscar, você também pode usar um hash mais fraco e mais rápido.

    • 0
  5. cmcapellan
    2018-12-28T13:01:47+08:002018-12-28T13:01:47+08:00

    Dê uma olhada no módulo dbatools PowerShell para obter uma opção gratuita para Static Data Masking, escrito por Chrissy Lemaire (@chrissy-lemaire) e sua equipe. Todas as ferramentas deles são ótimas, então tenho certeza que vale a pena dar uma olhada.

    Os dois comandos para procurar em dbatools são: New-DbaDbMaskingConfig Invoke-DbaDbDataMasking

    Dê uma olhada na postagem do blog anunciando isso: mascaramento de dados automatizado

    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve