Qual é uma boa prática de segurança para armazenar um banco de dados crítico nos laptops dos desenvolvedores?


33

Temos alguns dados:

  1. Os desenvolvedores precisam de uma réplica do banco de dados de produção em suas máquinas.
  2. Os desenvolvedores têm a senha do referido banco de dados nos arquivos App.config.
  3. Não queremos que os dados no referido banco de dados sejam comprometidos.

Algumas soluções sugeridas e suas desvantagens:

  1. Criptografia de disco completo. Isso resolve todos os problemas, mas diminui o desempenho do laptop, e somos uma start-up, portanto, não temos dinheiro para cavalos de força.
  2. Criando uma VM com disco rígido criptografado e armazene o banco de dados nela. Funciona bem, mas não ajuda muito, pois há uma senha no Web.Config.
  3. Solução número 2 + que exige que o desenvolvedor digite a senha do banco de dados toda vez que executa alguma coisa. Ele resolve todos os problemas, mas é realmente complicado para os desenvolvedores que às vezes iniciam o aplicativo várias vezes por minuto. Além disso, temos vários aplicativos que se conectam ao mesmo banco de dados, e a implementação de uma tela de senha precisará diferir em cada um.

Portanto, minha pergunta é: se existe alguma solução comum para esse problema ou alguma sugestão sobre como tornar viável alguma das soluções acima?


26
Você realmente mediu o impacto no desempenho da criptografia de disco completo. Eu tenho usado em laptops bastante antigos e não reconheci nenhuma degradação significativa no desempenho. Os sistemas operacionais modernos são muito bons em cache e os discos são lentos de qualquer maneira. O pior impacto provavelmente está no tempo de vida da bateria.
5gon12eder

69
Para ser honesto, isso não soa como a abordagem correta. 1) Por que os desenvolvedores precisam de um banco de dados de produção em suas máquinas? Não existe uma maneira de criar dados fictícios para um dev db? 2) Por que a senha é armazenada em texto sem formatação em um arquivo de configuração? Você está tentando colocar um bandaid em um processo defeituoso, ao que parece. Talvez você possa revisar o que realmente vive nas máquinas de desenvolvimento, bem como como a senha é armazenada no banco de dados.
Thomas Stringer

2
Existem razões para que os desenvolvedores precisem do banco de dados de produção. Por razões históricas, seu trabalho é muito associado aos dados ao vivo. Sei que é uma péssima ideia e, se não encontrarmos uma boa solução, passaremos para dados fictícios. Por enquanto, estou tentando encontrar uma boa solução sem isso.
Svarog

6
Nenhum usuário de um MacBook Pro pode informar, a partir da velocidade da máquina, se a criptografia completa do disco está ativada ou desativada em uma unidade SSD. Não há diferença. Nada que você possa notar. Talvez você possa medir, mas nada que seja perceptível.
gnasher729

5
Segundo comentário do @ gnasher729. Tendo usado a criptografia de disco completo por muitos anos em ambientes regulamentados (financeiro e de saúde), não precisa ser um dreno perceptível no desempenho. Muitas pessoas mencionam outros pontos válidos, mas em um ambiente HIPAA é difícil ter uma política razoável sem criptografia de disco completa, mesmo que os bancos de dados não sejam colocados em notebooks. E-mails e outros fragmentos de dados geralmente acabam lá de qualquer maneira. Trocar arquivos .... etc ... A criptografia de disco completo não é adequada, mas geralmente é necessária.
Joshp

Respostas:


100

Não apenas você não deseja uma cópia do banco de dados de produção, como também pode ser ilegal. Por exemplo, nos EUA, você não pode mover dados de produção para fora do ambiente de produção se eles contiverem informações regulamentadas, como dados pessoais de saúde, dados financeiros ou mesmo dados que possam ser usados ​​em roubo de identidade. Se o fizer, poderá ser multado, perder a conformidade e, portanto, estar sujeito a auditorias mais agressivas ou até mesmo ser nomeado em uma ação judicial.

Se você precisar de dados em escala de produção para teste, terá algumas opções:

  1. Gere todos os dados fictícios. Isso é mais complicado do que parece. É surpreendentemente difícil e trabalhoso gerar dados imaginários sensíveis.
  2. Anonimize seus dados de produção. Isso pode ser mais fácil, mas continue com cuidado.

Para a opção 2

  • No ambiente de produção, um administrador de banco de dados autorizado faz uma cópia dos dados de produção.
  • Ainda no ambiente de produção, o mesmo administrador autorizado executa uma rotina que anonimamente todos os dados confidenciais. Em caso de dúvida, anonimize.
  • Somente então os dados devem ser movidos para outro ambiente.

31
e a senha para a cópia do banco de dados não deve ser a mesma da versão de produção .....
Lightness Races with Monica

3
"Por exemplo, nos EUA, você não pode mover dados de produção para fora do ambiente de produção se eles contiverem informações regulamentadas" O quê? Você tem uma fonte para isso? Você não pode, por exemplo, usar backups de um banco de dados de produção como dados para o ambiente de temporariedade ou como testar dbs em máquinas de desenvolvedor?
Nanny

12
@ nanny Não, se você estiver usando dados regulamentados. Por exemplo, trabalhei sob o regulamento HIPAA. A HIPAA declara "As entidades cobertas também devem implementar políticas e procedimentos mínimos razoáveis ​​necessários, que limitem a quantidade de informações de saúde protegidas que são usadas, divulgadas e solicitadas para determinados fins". Uma política mínima necessária está aberta a alguma interpretação. Nosso consultor jurídico sugeriu uma interpretação estrita que mantinha os dados confidenciais contidos onde os desenvolvedores não podiam acessá-los. (É realmente necessário que eles façam seu trabalho?) O mesmo cuidado se aplica à conformidade financeira como o PCI.
Corbin março

4
@ nanny Tome isso como boato de um não advogado, mas, pelo que entendi, as regras variam muito de estado para estado. O consultor jurídico com quem trabalho sempre erra por precaução. A rigor, os desenvolvedores não precisam de SSNs reais para desempenhar suas funções, portanto, os conselhos sugerem que esses SSNs morem em um ambiente protegido, onde os desenvolvedores não podem acessá-los. Não me escute, no entanto. Um advogado que cuide dos seus interesses a longo prazo será o melhor recurso.
Corbin março

5
Estritamente falando, não é ilegal ser descuidado com o PPI, a menos que você esteja trabalhando no governo, o Título 32 entra em jogo ... mas é uma exposição séria à responsabilidade civil. caso contrário, essa é uma ótima resposta. votado.
dwoz

9

Você pode, pelo menos, fornecer aos VMs dos desenvolvedores em seu datacenter os quais eles podem obter RD para este trabalho? Embora eles realmente devam trabalhar com dados que não são de produção, isso seria mais seguro até você chegar lá, pois os dados não seriam armazenados em laptops roubados com facilidade.


isto se parece mais com um comentário, consulte Como responder
gnat

5
@gnat, esta resposta pode ser curta, mas é uma alternativa muito boa sugerida.

Não seja tão pedante, @gnat ... esta é uma ótima resposta.
dwoz

@ dan1111 Esse é o problema. Não é uma resposta. É uma alternativa. Isso faz com que seja um comentário, não uma resposta.
precisa saber é o seguinte

2
@corsiKa, respostas que desafiam a premissa da pergunta são permitidas e geralmente são respostas muito boas. Consulte o problema XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem . E respostas mais detalhadas podem ser melhores, mas isso ainda é uma resposta.

8

Mude sua maneira de trabalhar, se possível.

Como outros já apontaram:

  • Usar dados de produção para desenvolvimento não é uma boa prática.
  • Ter uma senha armazenada em texto sem formatação não é uma boa prática.

Ambos os expõem a riscos significativos e devem ser alterados, se possível. Você deve pelo menos avaliar seriamente qual seria o custo de fazer essas alterações. Se essa é uma dependência externa que você não tem poder de mudar, considere elevar isso como uma preocupação para quem tem esse poder.

No mundo real, porém, pode não ser realmente possível mudar isso. Supondo que o que você está fazendo é legal, você pode ter que conviver com esse acordo (pelo menos temporariamente).

Se isso for realmente necessário, você só precisará fazer a criptografia de disco completo.

Dados os riscos, você precisa usar a melhor opção de segurança disponível, e é isso. Se houver um impacto no desempenho, viva com ele. É um custo de trabalhar com dados confidenciais.

Se eu fosse seu cliente, não ficaria impressionado com o fato de você ter decidido não usar a melhor opção de segurança disponível com meus dados, porque isso tornava seus laptops um pouco mais lentos.


1
"Não é uma solução ideal" deve ser alterada para "uma idéia completamente estúpido" IMO
Darkhogg

@Darkhogg, você está certo, deve ser mais forte. Editado. Eu não chegaria a ser "completamente estúpido" sem saber o quão sensível é o aplicativo. Na prática, o risco de comprometimento é muito, muito baixo se você usar criptografia de disco completa, portanto, é possível fazer muito disso como um problema de segurança.

Eu concordo com o primeiro ponto, mas não o segundo. Se você não estiver armazenando sua senha em texto simples, onde está armazenada (1) texto cifrado ou (2) seu cérebro. Se (1), onde você está armazenando a senha da cifra (loop infinito detectado). Se (2), espero que você goste de acordar às 2:00 da manhã para digitar a senha para reiniciar o serviço.
Emory

1

A resposta de Corbin March é muito boa, acrescentarei apenas um detalhe adicional: geralmente você tem duas classes de dados no banco de dados de produção: metadados de sistema / aplicativo; e dados do usuário do cliente / dados transacionais. Este último nunca deve ser usado em um ambiente de desenvolvimento "como está".

É muito raro, de fato, que você precise de informações reais do cliente de produção para fazer o desenvolvimento.

No entanto, se o problema que o OP está descrevendo aqui envolve dados de segredos comerciais ou dados de sistema altamente proprietários que não envolvem dados de clientes, isso é exigido pelos desenvolvedores ... a abordagem de segurança deve envolver um esquema que não possui a senha db mantida em texto não criptografado em um arquivo de recurso em algum lugar. É necessário haver um mecanismo para, por exemplo, gerar novamente uma senha diária, que não esteja armazenada no disco.


5
client user data/transactional data... should NEVER be used in a development environment "as is." - Isso me parece impraticável. Os problemas de programação relacionados à produção relacionados aos dados de um cliente específico seriam insolúveis sob este acordo. Além disso, os dados ao vivo reais são extremamente úteis do ponto de vista de teste. O esforço de privatização ou anonimização deve se concentrar apenas nos dados especificamente regulamentados.
Robert Harvey

@RobertHarvey, só é impraticável se você não conseguir reproduzir o problema de produção em um ambiente de desenvolvimento. Acho que, ao longo da minha carreira (longa), posso contar com alguns dedos o número de vezes que dados de teste higienizados adequadamente não foram adequados para reproduzir um bug de produção. "Informações comerciais proprietárias" vão muito, muito além dos números SSNs e CC!
Dwoz 19/11/2015

4
Mas se você seguir esse caminho, terá pessoas de TI que não podem fazer seu trabalho porque não têm acesso administrativo a tudo. Admito que isso cause problemas potenciais em Snowden, mas não vejo uma alternativa viável, a não ser contratar pessoas em que você possa confiar. Sarbanes Oxley e HIPAA são muito específicos sobre que tipo de dados precisam ser sequestrados e não incluem "todos os dados de produção", nem por um longo tempo. Dito isso, não acredito que existam dados de produção de qualquer tipo em laptops em roaming.
Robert Harvey

1
-1 para NUNCA. Seus comentários mais sutis são melhores que sua resposta; você deve editá-los nele.

1
@ dan1111, podemos concordar em discordar. Os dados do cliente "como estão" NUNCA NUNCA devem ser usados ​​em sistemas de desenvolvimento. Deve sempre ser higienizado. Você não acredita nisso porque ainda não foi mordido por este mangusto raivoso ... e é isso que acontece quando acontece. Um roedor insano raivoso que pretende tirar seu sangue. Siga meu conselho, evite o mangusto raivoso.
dwoz

1

Você não indica qual banco de dados e qual ambiente.

Se você puder usar a segurança integrada, o banco de dados não poderá ser acessado sem estar conectado como usuário. Sim, se os dados estiverem no disco rígido, eles podem ser invadidos, mas essa é uma defesa de primeiro nível.

App.config faz pensar que isso pode ser um .NET. Coloque o config em um pen drive e leia-o no pen drive. Se a unidade não estiver presente, faça o usuário digitar a senha.

Existe uma maneira de armazenar a senha na memória na primeira vez em que é digitada e lida por todos. Novamente, você não indica o ambiente. Arquivos mapeados na memória

Com alguns TDE, você pode armazenar a chave em um dispositivo separado, para que eles apenas forneçam a chave quando o servidor do banco de dados for iniciado.


0

Uma opção possível é fazer uma cópia do banco de dados e limpá-la com um script, para que você tenha dados diferentes dos que estão realmente em produção. Você não terá os mesmos dados que a produção, mas terá a mesma escala.


este parece meramente ponto repeat feito e explicado na resposta top cerca de uma semana atrás
mosquito
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.