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_datareader
papel; 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)?
sql-server
best-practices
permissions
Tom Hunter
fonte
fonte
Respostas:
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.
fonte
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.Não.
Os desenvolvedores não devem ter acesso aos sistemas de banco de dados de produção pelos seguintes motivos:
Disponibilidade e desempenho : ter direitos somente leitura em um banco de dados não é inofensivo. Uma consulta mal escrita pode:
Segurança : seu banco de dados de produção pode conter informações confidenciais como:
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:
É apropriado conceder acesso à produção de seus desenvolvedores quando você tiver certas deficiências nesses outros grupos.
Por exemplo:
fonte
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):
Essa é uma receita para o desastre. Observe que este é um produto cartesiano com um pedido de, o que significa que será classificado em tempDB.
fonte
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.
fonte
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.
fonte
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:
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.
fonte
fonte
Alguns itens a serem considerados
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.
fonte
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.
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.
fonte
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.
fonte
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.
fonte
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!
fonte
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.
fonte
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.
fonte
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 .
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte