Os desenvolvedores devem poder consultar os bancos de dados de produção?

162

Os desenvolvedores devem ter permissão para consultar ( SELECT/ somente leitura) bancos de dados de produção? No local anterior em que trabalhei, a equipe de desenvolvimento teve o db_datareaderpapel; onde trabalho agora, a equipe de desenvolvimento não pode nem se conectar à instância de produção.

Uma das instâncias de teste é uma cópia da produção restaurada a partir de um backup de produção uma vez por semana, para que não haja problemas com os desenvolvedores realmente vendo os dados.

Quais são as boas razões para não permitir que os desenvolvedores consultem a produção (exceto por simplesmente não querer que eles tenham acesso à leitura de dados confidenciais)?

Tom Hunter
fonte
25
Primeiro, conte-nos por que os desenvolvedores querem se conectar à produção.
Nick Chammas
6
Estou tentando investigar um problema de produção. Os dados relevantes foram carregados na produção hoje e ainda não estão na instância de teste (onde tenho acesso).
Tom Hunter

Respostas:

152

Realmente depende se o desenvolvedor tem alguma responsabilidade de suporte. Se eles estão atentos ao suporte de terceira linha, provavelmente precisarão consultar o banco de dados de produção para fazer isso.

Geralmente, é uma má idéia fazer qualquer coisa em um servidor de produção, a menos que seja realmente necessário fazê-lo lá.

Para a maioria dos propósitos de desenvolvimento, espelhos ou capturas instantâneas do banco de dados de produção serão adequados e provavelmente melhores que o banco de dados de produção ao vivo. Se você estiver fazendo algo que envolva integração, desejará ambientes de banco de dados estáveis, onde poderá controlar o que está neles. Qualquer coisa que envolva reconciliação também precisará da capacidade de olhar para um ponto controlado no tempo.

Se o problema é que você não possui ambientes de espelho de produção ou nenhum meio de colocar uma cópia dos dados de produção em algum lugar para seus desenvolvedores, essa é uma pergunta um pouco diferente. Nesse caso, seus desenvolvedores realmente precisam de pelo menos um ambiente de espelho. Se você não consegue ver qual é o problema nos dados, é meio difícil solucioná-lo.

ConcernedOfTunbridgeWells
fonte
57
+1 para Generally it's a bad idea to do anything on a production server unless it's really necessary to do it there.O ônus da prova (por assim dizer) deve ser justificar a concessão de acesso, sem justificá-lo.
JNK
135

Não.

Os desenvolvedores não devem ter acesso aos sistemas de banco de dados de produção pelos seguintes motivos:

  1. Disponibilidade e desempenho : ter direitos somente leitura em um banco de dados não é inofensivo. Uma consulta mal escrita pode:

    1. Bloqueie tabelas, bloqueando outros processos críticos.
    2. Lixeira seu cache de dados, forçando outros processos a reler dados do disco.
    3. Taxe sua camada de armazenamento, impactando outros serviços que compartilham esse armazenamento.
  2. Segurança : seu banco de dados de produção pode conter informações confidenciais como:

    • hashes de senha
    • Informações de pagamento
    • outras informações de identificação pessoal

    Somente aqueles que precisam absolutamente acessar essas informações devem tê-las. Em uma empresa bem organizada, os desenvolvedores não estão entre essas pessoas. Além disso, sua empresa falhará na conformidade com PCI e SOX se seus desenvolvedores puderem acessar sistemas de produção com esses dados.

    As razões para isso são óbvias. O trabalho de desenvolvimento de um desenvolvedor passa por muitas mãos antes de ser publicado. O que impede um desenvolvedor mal-intencionado com acesso direto à produção de roubar seus dados de produção ou colocar seu banco de dados ao vivo de joelhos?

    "Mas isso vale para os DBAs também! Eles poderiam fazer isso!" Exatamente. Você quer o mínimo de superusuários quanto possível.

Sim.

Os desenvolvedores devem ter acesso aos sistemas de produção.

Na minha empresa, temos quatro equipes que lidam com bancos de dados de produção. Eles são:

  1. Desenvolvedores , que projetam e escrevem o esquema e o código para os bancos de dados. Eles não têm acesso aos bancos de dados em produção. Porém, eles às vezes se sentam com os administradores ou com o pessoal de suporte e os ajudam a ver algo ao vivo.
  2. Administradores , que implantam, monitoram e gerenciam os bancos de dados em produção.
  3. Ajude as pessoas que investigam problemas de produção sensíveis ao tempo e fornecem feedback aos desenvolvedores para que eles possam desenvolver correções.
  4. Pessoas de Business Intelligence , que extraem dados de bancos de dados de produção usando cópias regularmente atualizadas desses bancos de dados ou extrações cuidadosamente escritas e com controle de qualidade (geralmente criadas pelos Administradores).

É apropriado conceder acesso à produção de seus desenvolvedores quando você tiver certas deficiências nesses outros grupos.

Por exemplo:

  • Você não tem equipe de suporte. Quem saberá onde procurar para depurar esse problema de produção sensível ao tempo? Seus desenvolvedores. Conceda a eles acesso " quebre o copo ".
  • Você não tem equipe de BI. Seus administradores não têm ou querem nada com relatórios ou extrações. Quem vai solucionar o relatório que seus executivos veem todas as manhãs? Seus desenvolvedores. Conceda a eles acesso limitado para depurar esses relatórios e extrações.
  • Você não tem equipe administrativa. Você está em uma empresa muito pequena ou iniciante, então diga olá ao "DBA acidental". Seus desenvolvedores dobram como administradores e, portanto, precisam de acesso total à produção.
Nick Chammas
fonte
78

O desempenho seria uma GRANDE razão.

Só porque eles não podem alterar os dados não significa que eles não podem afetar o servidor. Uma consulta mal escrita pode deixar o ambiente de produção de joelhos e potencialmente causar outros problemas (como tempdb overflows):

SELECT *
FROM BigTable A, OtherBigTable B
ORDER BY Somecolumn

Essa é uma receita para o desastre. Observe que este é um produto cartesiano com um pedido de, o que significa que será classificado em tempDB.

JNK
fonte
33

O princípio é "menos privilégio" e "precisa saber": os desenvolvedores passam neste teste?
Especialmente quando os auditores ou Sarbannes-Oxley chegam batendo.

Então, minha próxima suposição: os desenvolvedores são estúpidos. Então, se eles precisam dizer para 3ª apoio de linha, que então precisa dele? Os macacos da Web normalmente não, mas sim os tipos de banco de dados, se é esperado que eles o suportem.

Então, o acesso é necessário permanentemente? Eles podem ter acesso "quebra de vidro" usando um logon SQL ou uma conta alternativa do Windows que exija um logoff. No nosso caso, foi o proprietário dos dados (esperançosamente um empresário experiente em tecnologia) e o gerente de TI para aprová-lo.

Eu tenho visto os desenvolvedores testar contra ou executar consultas sobre a produção e levá-la para baixo por causa da ignorância. Dizendo isso, os desenvolvedores devem assumir a responsabilidade por suas ações: se derrubarem um servidor, deverão sofrer de acordo. Eu tenho alguém rebaixado após um incidente ...

Estes assumem uma loja de tamanho razoável, é claro. Quanto mais chapéus as pessoas vestem, menos separação de tarefas você pode ter

Além disso, existe um ambiente em que os desenvolvedores podem executar consultas com dados recentes? Na minha última loja, o prod era restaurado todas as noites em um servidor de teste para fornecer isso.

gbn
fonte
20

Eu acho que a resposta é, como em muitas coisas de TI, "depende".

Um banco de dados ERP massivo com muitas informações confidenciais da empresa e do cliente? Provavelmente não (por razões de segurança e desempenho).

Um banco de dados departamental de 5 MB com um front-end do Access que rastreia contribuições para os fundos de donut e pizza? Não fará muita diferença, pelo menos para acesso somente leitura.

É verdade que o primeiro exemplo é muito mais comum que o segundo, mas essas são diferenças que você deve saber se estiver encarregado de tomar esses tipos de decisões políticas. Mas, por outro lado, é incrível a rapidez com que um banco de dados de fundos de donuts e pizzas de 5 MB pode chegar a um número de peça de 50 GB / número de cartão de crédito de cliente / quem sabe o que- outro banco de dados, se você deixar.

db2
fonte
20

Em um ambiente OLTP comum 24/7, um desenvolvedor normal não deve ser permitido na produção. Período! Se, de tempos em tempos, aparecer um motivo específico, as permissões poderão ser concedidas mediante solicitação. Mas em uma base usual não.

Eu já vi muitas razões para isso:

  • SELECT * de uma grande tabela que leva a:

    • questões de desempenho (produtos cartesianos);
    • problemas de bloqueio que eventualmente levaram o site de joelhos;
    • cadeia de bloqueio que interrompe a replicação;
    • encomendar grande conjunto de dados que encheu a unidade TempDB que .. adivinhem? Causou loucura completa :-)!
    • pressão alta para o DBA responsável pela produção naquela noite;
  • leitura de dados confidenciais (um desenvolvedor não deve ter acesso às informações do cartão de crédito .. ou a qualquer detalhe pessoal do usuário);

Tenho certeza de que existem ainda mais razões.

Marian
fonte
19
  • Segurança: Pode haver informações confidenciais que são higienizadas quando disponibilizadas para os desenvolvedores.
  • Paranóia: alguns podem pensar que você ainda pode atrapalhar os dados com apenas acesso selecionado.
  • Desempenho: uma consulta requer alguns recursos para ser executada e você não pode me dizer que seus desenvolvedores são perfeitos quando escrevem código.
Paulo
fonte
16

Alguns itens a serem considerados

  • Os dados são sensíveis?
  • Os programadores fazem parte de uma equipe confiável de núcleo ou de uma equipe offshore?
  • Qual é a escala dos dados consultados em termos de impacto no desempenho?
  • Qual é a escala do projeto ou os dólares envolvidos?
  • Quão crítico é o tempo de atividade?

Dólares menores precisam de menos processo e fluxo de desenvolvimento mais rápido.

Dólares maiores precisam de mais processos, requer padrões mais rígidos de práticas de desenvolvimento.

Adapte suas práticas ao que você está fazendo.

Jason Sebring
fonte
14

Eu trabalho como desenvolvedor para uma empresa muito grande. Todos os nossos desenvolvedores que farão qualquer tipo de suporte (basicamente todos eles) têm acesso aos bancos de dados de produção relevantes. Só posso falar pela minha equipe específica, mas vou lhe dizer por que temos acesso.

  1. Precisamos de acesso em tempo real para acompanhar o processamento diário. (Embora tenhamos um painel, precisamos manter um olho profundo nas coisas. Embora seja bom ter esse recurso em nosso painel, descobrimos que isso não é prático.)
  2. Precisamos de acesso em tempo real para investigar falhas de produção, pois os atrasos podem ter um grande impacto. (Eu não vou discutir nossas falhas aqui. Elas vêm de todos os tipos)
  3. Geralmente, precisamos fazer relatórios personalizados para usuários corporativos e essas informações precisam estar atualizadas. (os dba não têm tempo para fazer isso e não temos tempo para esperar por eles. Não é o ideal, com certeza.)
  4. Precisamos fazer a verificação das implantações / patches de DDL / DML de produção. (Os DBAs os implantam, mas apenas sabemos como deve ser estruturada. Sabemos mais sobre nossa estrutura de banco de dados do que os DBAs. Podemos ser estranhos aqui, mas nosso banco de dados é muito complicado porque nossos negócios são muito complicados.)

O desempenho é uma preocupação. Temos ocorrências de desenvolvedores causando lentidão. No entanto, essas são instâncias isoladas e nosso SQL é tão orientado para o desempenho que é raro que nossos desenvolvedores não entendam o impacto de suas consultas.

user606723
fonte
2
Isso não justifica o acesso ao produto. número 4: use ferramentas como o red gate para preparar o script corretamente. 3: use dados de um dia em não-prod 1. que nenhum relatório ou painel?
gbn 6/01/12
@gbn, 4) ainda precisamos verificar de qualquer maneira. 3) não pode ter um dia de idade.
user606723
11

Para que essa pergunta seja feita, é preciso presumir que eles atualmente não têm acesso. Se a organização de alguém está desenvolvendo software e isso é para solucionar problemas de um cliente e o cliente fornece uma cópia do banco de dados, então 'sim'. Caso contrário, eu recomendaria manter os desenvolvedores fora de produção e criar ambientes alternativos criados para suas necessidades de pesquisa. Depois que o creme dental sai do tubo, fica difícil colocá-lo novamente.

jl01
fonte
10

Concordo que o ônus da justificação deve recair sobre os que necessitam de acesso. Normalmente, nos ambientes onde consultei, tive acesso aos sistemas de produção em que era um ambiente pequeno e eu era a pessoa de suporte. Eu tive acesso a backups, etc., onde suportei o suporte e acesso indireto (através de um desenvolvedor de suporte dedicado) aos dados de produção.

O importante é que você precisa desse acesso quando está no gancho para manter tudo funcionando sem problemas e precisa responder à pergunta do financeiro sobre algo que não está funcionando. Nesse caso, nem sempre é possível trabalhar com dados do dia anterior. Por outro lado, quanto mais acesso, pior. Normalmente, como consultor, costumo evitar esse tipo de acesso, a menos que seja necessário. Como estou trabalhando em bancos de dados financeiros, a última coisa que quero é ser acusado de inserir minhas próprias faturas :-D.

Por outro lado, se você não precisa de acesso, não deve tê-lo. Eu realmente não compro o argumento de dados confidenciais, pois o desenvolvedor provavelmente está atento para garantir que isso seja tratado corretamente (e é muito difícil de verificar sem olhar para o que realmente foi armazenado quando um relatório de bug chega). Se você não pode confiar no desenvolvedor para examinar os dados que o aplicativo do desenvolvedor está armazenando, não deve contratar o desenvolvedor para escrever o aplicativo. Existem muitas maneiras pelas quais o desenvolvedor pode ofuscar os dados e enviá-los por e-mail, e você nunca pode ter certeza. Os controles MAC ajudam aqui, mas eles ainda são bastante complexos de implementar.

O grande problema do meu lado tem a ver com acesso de gravação. Se um desenvolvedor não tiver acesso, a fortiori não terá acesso de gravação. Se você deseja verificar a integridade dos livros, mantenha o acesso de gravação ao menor número possível de pessoas. As trilhas de auditoria são muito mais fáceis de validar se os desenvolvedores não tiverem acesso. Se o desenvolvedor tiver acesso de leitura, você sempre terá alguma dúvida sobre se houve algum anexo de escalonamento de privilégios que possa fornecer acesso de gravação (talvez injeção SQL de procedimento armazenado?). Muitas vezes, tive acesso total às informações de cobrança do cliente quando tive acesso a ambientes de armazenamento temporário. Se houver um ambiente de armazenamento temporário que funcione, normalmente pedirei ativamente para não ter acesso à produção, a menos que seja necessário.

Portanto, isso não é perfeito, é claro. Um desenvolvedor ainda pode criar portas traseiras para o aplicativo que podem não ser prontamente detectáveis, mas essa abordagem é razoável, dado que os dados de backup estão disponíveis um dia antes, parece-me que essa é a preocupação que eles têm.

Espero que isto ajude.

Edit: Apenas adicionando que, nos ambientes maiores em que trabalhei, tive acesso a dados completos de backup, geralmente variando de alguns dias a alguns meses para o sistema financeiro. Isso sempre foi bom o suficiente para o meu trabalho e as únicas vezes em que foi quebrado foram quando o pessoal da área financeira precisou da capacidade de testar com dados mais recentes para que eles pudessem se igualar à produção.

Chris Travers
fonte
9

Não ter acesso é uma coisa boa e uma maneira de proteger os desenvolvedores e outras pessoas de não corromperem acidentalmente os dados ou visualizá-los. Isso também protege as empresas de violar a lei (ou seja, violações da Hipaa e preocupações com a privacidade)

Um desenvolvedor nunca precisa realmente acessar um ambiente de produção; é mais fácil do ponto de vista do desenvolvedor se um bug difícil não puder ser reproduzido.

No entanto, um desenvolvedor pode inserir mini-despejos ou arquivos de log e usar os arquivos de símbolo do PDB para recriar o bug.

Se os dados precisarem ser trazidos para um ambiente de teste, é comum que algum tipo de processo depure os dados, o que pode criar trabalho extra.

Dependendo do software de banco de dados usado no que você está chamando de produção, pode ser necessária uma nova licença para o desenvolvedor acessar o banco de dados, o que é uma grande despesa para simplesmente ter acesso de leitura.

Se sua empresa não está fornecendo as ferramentas para depurar ou pesquisar problemas de produção, não é porque você não tem acesso aos dados de produção.

Os dados são a parte mais valiosa da maioria dos aplicativos!

SoftwareCarpenter
fonte
8

O desempenho pode ser um dos motivos.

As consultas do desenvolvedor geralmente podem ser ineficientes, causando bloqueio excessivo ou uso de recursos até que sejam ajustadas corretamente.

Um sistema de produção não é um local adequado para os desenvolvedores experimentarem.

JSR
fonte
8

Depende do DBA e de como ele ou ela está confiante com o desenvolvedor. Geralmente, os desenvolvedores recebem privilégios de consulta (leitura) nos bancos de dados de produção. Como regra geral, os desenvolvedores devem trabalhar apenas com bancos de dados test / dev.

MarlonRibunal
fonte
8

O desafio é que a maioria dos aplicativos de software é orientada por dados. Portanto, quando você está tentando corrigir um problema no aplicativo, precisa realmente ver os dados que o estão dirigindo. Portanto, os desenvolvedores realmente precisam de alguma forma de acesso.

Usar logons SQL para fornecer apenas acesso somente leitura a tabelas é ótimo. MAS, o que os impede de criar uma consulta com 20 associações ou executar SELECT * em uma tabela com milhões de registros? Essas consultas podem matar acidentalmente o desempenho do seu banco de dados e armazenamento.

Minha empresa Stackify criou uma maneira inteligente de resolver isso. Os desenvolvedores podem executar a consulta através do nosso software e usamos o plano de consulta para garantir que seja apenas uma instrução SELECT e que o custo estimado da consulta seja baixo e retornará apenas alguns registros. Dessa forma, eles não podem fazer muito mal. Também auditamos todas as consultas que eles executam.

Essa é apenas uma das coisas que fornecemos. Visite-nos em http://www.Stackify.com para saber mais sobre nossas soluções de suporte ao DevOps .

Matt de Stackify
fonte
4
Alguns podem considerar isso como spam, porque a intenção parece promover apenas o seu produto. OTOH, é relevante para a questão e divulgada adequadamente, então eu pessoalmente acho que vale a pena.
Jack Douglas
Como um ponto importante, pelo menos no PostgreSQL, o plano de consulta não é suficiente para saber que é uma consulta somente leitura.
Chris Travers
7

Sim. Em alguns casos, faz sentido permitir que alguns subconjuntos de usuários, incluindo desenvolvedores, tenham algum nível de acesso para consultar dados de produção. No entanto, as limitações adequadas devem estar em vigor por dois motivos. Primeiro, como DBA, você deve fazer o possível para garantir o nível de serviço necessário a todos os usuários. Além disso, você deseja evitar consultas ruins não intencionais, como exclusões em massa ou difamações de regras de negócios. Não é necessário dizer que controles de segurança adequados devem estar em vigor.

Quaisquer que sejam os motivos que você possa ter para não permitir consultas ad hoc diretamente nas tabelas do banco de dados, pode-se argumentar para permitir consultas a visualizações e procedimentos armazenados. Usando permissões de banco de dados, você pode impedir consultas SELECT contra tabelas diretamente e até limitar quais visualizações e procedimentos armazenados a um determinado usuário tem acesso. Esse método não apenas oferece flexibilidade à sua base de usuários, mas também protege a integridade e a confiabilidade dos dados quando implementadas corretamente.

Tom Resing
fonte
5

Em nossa empresa, mantemos escravos somente leitura de bancos de dados de produção que não são confiáveis ​​pelos serviços de produção. Concedemos aos desenvolvedores acesso àqueles para acesso aos dados de produção. Se houver dados confidenciais (informações do cliente, informações de pagamento, etc.), restringimos a replicação dessas tabelas e mantemos uma tabela de dados de amostra no servidor escravo.

Ryan Waldron
fonte
1

Não nunca!!

É por isso que temos servidores de desenvolvimento / teste / UAT. Os dados do Production podem ser copiados no ambiente de teste e os desenvolvedores podem prosseguir com o teste. Consultas selecionadas podem ser muito prejudiciais também no caso de um ambiente de produção. Aumenta a carga e no horário de pico pode reduzir o desempenho inteiro.

Qualquer informação que eles precisem deve passar pelo DBA, que pode executar o que deseja (Selecionar) e enviar os resultados. É assim que fazemos em nosso ambiente.

Ramakant Dadhichi
fonte
-1

Não sei por que todos supõem que os desenvolvedores são estúpidos e não sabem de nada. Eu recebo uma amostra de vários papéis diferentes, onde eles estragaram tudo e não deveriam estar "em produção". Eu tenho DBAs, Sys Admins, Network Admins, Desenvolvedores, etc ... tudo bagunçado.

Ninguém (dev, dba, sa) tem acesso a qualquer servidor ou banco de dados em qualquer ambiente com o login de rede normal. Todos eles têm contas "admin" específicas que devem ser usadas. Sim, normalmente os dba e sa os usam com mais frequência, mas mesmo eles devem pisar levemente. Eu queimei por todos.

Portanto, em um bom dia, nenhuma função de TI precisa de acesso. No entanto, o sh! T atinge o ventilador, com todas as mãos no convés e precisamos das pessoas certas para resolver o problema. Isso geralmente é liderado pelo desenvolvedor que conhece o aplicativo e guia o dba e sa para determinados pontos. É apenas o atraso desnecessário ou solicitação e aprovação.

Além disso, a aprovação nunca é seguida por nenhum tipo de auditoria, portanto, a aprovação não significa nada.

Phil
fonte
2
Não sabe ao certo sobre quais ambientes você está falando, mas em qualquer empresa que tenha que obedecer a regulamentações sérias, como PCI, SOX, SISR, etc. de nível superior, faça login e acesse o NECESSÁRIO para acessar. No nosso caso, não apenas o registramos, mas também o dividimos para que ninguém possa editá-lo após o fato.
Ali Razeghi