Quel accès aux bases de données les développeurs devraient-ils avoir? [fermé]

16

J'ai donc travaillé dans de nombreux lieux de travail en tant que développeur et mon niveau d'accès à la base de données a été varié. Je n'ai généralement pas accès à la base de données de production.

La plupart du temps, j'ai accès à la base de données de test, mais cela varie. Parfois, je peux faire et modifier la base de données et les données à ma guise, mais il existe généralement d'autres dispositions. Comme si je n'avais qu'un accès en lecture aux données.

J'ai travaillé dans un endroit où une équipe DBA gérerait les bases de données, nous ne pouvions pas apporter de modifications du tout à moins que nous ayons soumis un formulaire avec le script sql pour qu'elles "inspectent". Ils n'avaient généralement pas grand-chose à voir avec le projet lui-même, donc la plupart du temps, c'était juste pour appuyer sur F5.

Honnêtement, je peux comprendre pourquoi prod doit être verrouillé, mais je préfère avoir autant d'accès à la base de données dans les environnements de développement et de test. Je pense que la plupart des développeurs sont raisonnablement capables de connaître leur chemin dans une base de données. Mais j'aimerais entendre des opinions? Quel accès aux bases de données les développeurs devraient-ils avoir? Peut-on nous faire confiance pour ne rien casser là-haut?

RoboShop
la source
6
Vous vouliez probablement demander "Quel accès aux bases de données de production les développeurs devraient-ils avoir?"
Mayank
@ Mayan Vous avez frappé le clou sur la tête. Il devrait toujours y avoir un serveur de test pour «jouer» avec de nouveaux concepts. Le serveur de production ne devrait voir que les versions révisées / testées / éprouvées. Je dirais la même chose pour les sites Web (même si la plupart des développeurs Web n'en utilisent pas).
Evan Plaice
@Mayank - Oui, j'aimerais entendre parler de l'accès aux bases de données de production, mais j'aimerais également entendre des opinions sur l'accès dans différents environnements tels que DEV, INT, TEST, PREPROD, etc.
RoboShop
1
Bien qu'il ait été marqué comme doublon, la question associée programmers.stackexchange.com/questions/246618/… est en fait une extension intéressante de cela.
Eamon Nerbonne

Réponses:

16

Les développeurs ont besoin d'un accès en lecture à toutes les bases de données, y compris les prod. Parfois, le problème est que les données sur Prod ne correspondent pas à ce qu'elles attendaient et elles doivent voir les données qui causent le problème car elles ne peuvent pas les reproduire sur dev.

Les développeurs ne doivent pas avoir de droits d'écriture sur les données de production ni de droits pour créer des objets. Rien ne devrait être produit qui ne fasse pas partie d'une version officielle. Trop souvent, les gens font une solution rapide à une prod qui ne fonctionne pas, ce qui rend la prod encore plus bouchée ou fonctionne, mais ils oublient de mettre le code dans les serveurs de développement / AQ / Staging et pire encore dans la source référentiel de contrôle et le code est écrasé environ un mois plus tard dans la prochaine version officielle.

Je préfère que les développeurs aient les droits complets d'AQ de la base de données parce que le déploiement sur un autre serveur les aide à voir s'il y a des lacunes dans leur processus de déploiement (oups j'ai oublié que j'ai changé cette table afin de le faire et ainsi de suite et oups j'ai oublié que j'ai fait ce changement en utilisant l'interface graphique et non dans un script dans le contrôle de code source, c'est ainsi que tout changement structurel de la base de données doit se produire).

Lorsque vous avez un nouveau client de type entreprise qui aura son propre ensemble de serveurs, les autorisations peuvent être allégées avant la mise en ligne. En effet, tant de choses doivent se produire et les quelques personnes qui peuvent y arriver sur prod sont en retard et ont même parfois besoin de prendre un congé. En particulier, les personnes qui importent des données d'un autre système peuvent être chargées de les mettre en production avant le lancement si le chargement de données va prendre du temps. Ces personnes ont tendance à être des spécialistes des données et il y a un niveau de confort plus élevé en leur permettant un accès temporaire à la prod que le développeur d'application moyen. Ce n'est pas un luxe que vous avez lorsque vous vous rendez sur un serveur de production déjà en ligne.

L'une des choses les plus critiques concernant la limitation des droits de production à la base de données est que les développeurs doivent ensuite s'assurer que leur travail est sous une forme qui peut être déployée par quelqu'un d'autre. Cela a tendance à améliorer la qualité du travail car ils n'essaient pas de faire des corrections à la volée car ils ont oublié quelque chose ou quelque chose n'a pas fonctionné car ils l'ont fait différemment sur prod que sur deve en s'appuyant uniquement sur la mémoire. Vous perdez également ces accidents "Oups, j'ai supprimé toute la table utilisateur par accident parce que j'ai oublié de mettre en surbrillance un type d'accident" lorsque les déploiements de prod utilisent uniquement des scripts exécutés dans leur ensemble, pas une commande à la fois, comme c'est généralement le cas lorsque les développeurs exécuter des choses sur prod. Une équipe disposant de droits limités sur les bases de données prod est également plus susceptible de stocker les modifications de base de données dans le contrôle de code source.

HLGEM
la source
1
+1 pour le commentaire sur l'oubli de mettre les choses en contrôle de code source. Je pense que quels que soient les droits d'accès et qui effectue la migration vers différents environnements, il devrait être aussi automatisé que possible pour garantir que toutes les versions sont construites à partir du code de contrôle de code source. Vous devriez faire de votre mieux pour limiter autant que possible tout processus nécessitant une connexion à distance au serveur vous-même pour jouer avec le code ou la base de données.
RoboShop
8
"Les développeurs ont besoin d'un accès en lecture à toutes les bases de données, y compris prod", c'est du non-non, au moins dans mon travail précédent. Les données de prod contiennent des enregistrements financiers et des transactions des clients, qui sont confidentiels.
ohho
3
@ohho, c'est une exception valide, mais cela doit rendre très difficile la résolution d'un problème que vous ne pouvez pas reproduire immédiatement sur dev.
HLGEM
7

Eh bien, c'est vraiment une question de "Vampires (Programmeurs) contre Werewolves (Sysadmins)" comme Jeff Atwood l'a dit ici .

Mayank
la source
Allez l'équipe Edward, je suppose.
Joel Etherton
2
@Joel Etherton, pour ceux d'entre nous qui n'ont pas vu le film, lequel est l'équipe Edward?
CaffGeek
1
@Chad Il est bon que vous avez effectivement pas vu cette merde « Twilight ». Au moins, vous n'aurez pas à faire semblant de ne pas l'avoir vu, comme moi. ;)
Mayank
@Chad: Je n'ai pas vu les films non plus, mais Edward est le vampire. Je sais qu'en raison du bombardement constant il y a quelque temps des publicités de Burger King et de la stupide campagne "Achetez nos conneries avec Twilight enduit partout". Soy un programador.
Joel Etherton
oh, je sais que c'est bien je ne l'ai pas vu. Et je ne le ferai jamais.
CaffGeek
7

Habituellement (cela signifie qu'il y a le luxe de configurer un environnement complet), le développeur a accès à:

  • Serveur de production
    • Aucun (SA / PM s'appliquera pour la configuration du schéma, l'utilisateur final fournira les données init)
  • Serveur UAT
    • Aucun (SA / PM s'appliquera pour la configuration du schéma et l'amorçage des données d'échantillon)
  • Serveur de test / QA
    • Habituellement, le développeur envoie le script de configuration du schéma à l'équipe QA et QA crée les tables
    • Les développeurs ont un accès complet aux bases de données mais les modifient rarement
    • Les développeurs peuvent aider leurs collègues QA à amorcer / corriger / supprimer certaines données
  • Serveur de développement / localhost
    • Accès total

La raison principale pour laquelle les développeurs ne devraient pas toucher aux serveurs de production est: lorsque quelque chose se passe mal, l'équipe d'exploitation est responsable, mais pas les développeurs.

ohho
la source
2
Les développeurs sont toujours responsables même s'ils ne peuvent pas toucher le système, ce sont eux qui finissent par le réparer.
Erin
2
Si le correctif est un changement dans la base de données, il est de la responsabilité de l'équipe de développement de produire le correctif et de l'équipe d'exploitation de l'appliquer. De plus, pour des raisons de raison, je ne permettrais pas aux développeurs de "modifier" de quelque manière que ce soit (données ou structure) l'environnement QA. Toute modification de cet environnement doit être aussi contrôlée que l'environnement de production.
Soronthar
2
Si vous avez une équipe d'opération ...
Marcie
Je demanderais un accès en lecture seule sur les serveurs de production. Rend la recherche de bogues beaucoup plus facile.
Carra
@Carra: Cela peut poser des problèmes réglementaires, car les serveurs de production peuvent avoir des données qui sont réglementées légalement (un système médical aux États-Unis doit se conformer à la HIPAA, par exemple). Je n'ai jamais été moi-même dans un endroit où quelqu'un a essayé de restreindre mon accès à des données confidentielles en direct, mais elles existent probablement.
David Thornley
2

Le minimum absolu dont vous avez besoin pour faire le travail.

Si tous les développeurs ont un accès complet à la base de données, les risques de se mettre en colère (ou ivre, ou extrêmement fatigué ou ...) et de causer de graves dommages sont beaucoup plus élevés que s'ils ne peuvent lire qu'à partir d'une base de données.

Si votre travail peut principalement être effectué sans accès en écriture à la base de données (et en gros, je veux dire au plus quelques demandes de changement par semaine), alors vous n'avez vraiment pas besoin d'un accès en écriture.

Trezoid
la source
2

Il y a 2 désirs concurrents dans tous les environnements de travail.

  • Le désir de donner aux gens l'accès afin qu'ils puissent résoudre les problèmes par eux-mêmes. Cela leur permet d'être rapides et en libre service.
  • Le désir de limiter et de contrôler l'accès pour éviter tout dommage, temps d'arrêt ou perte de données (intentionnel ou non).

Une partie de ce qui façonne l'équilibre qui est atteint (ou devrait de toute façon) est l'attente établie pour les développeurs. Dans chaque travail que j'ai eu, les développeurs avaient accès à tout ce que l'on attendait d'eux qu'ils se limitent. N'accédez au système que si vous savez ce que vous faites. Cela signifiait que vous saviez ce que vous faisiez du point de vue développeur et administrateur système. Si vous n'étiez pas sûr dans l'un ou l'autre domaine, vous n'aviez pas accès aux systèmes sans quelqu'un qui vous a accompagné.

En résumé, si vous ne le savez pas, vous ne devriez avoir accès à aucun autre système que des systèmes de développement facilement reconstructibles . Si vous le savez, vous ne devriez accéder à aucun système, à l'exception de vos systèmes de développement facilement reconstructibles .

Dietbuddha
la source
2

Les développeurs devraient avoir un accès complet aux bases de données de développement (idéalement, ils devraient exécuter un serveur local, mais ce n'est pas toujours possible). Ils doivent avoir accès à la base de données build / QA, mais uniquement aux données (doivent obtenir une autorisation / soumettre un ticket pour modifier la structure). Les développeurs ne devraient jamais avoir un accès occasionnel à la base de données de production (sauf s'il s'agit d'une petite entreprise / d'un projet et que les développeurs prennent également en charge la production).

TMN
la source
1

Je pense que la clé ici est le niveau de responsabilité des développeurs. Dans une grande organisation avec beaucoup de développeurs, ils n'auront probablement accès qu'au développement avec un accès en lecture seule à QA / Test.

Cependant, il devrait y avoir des personnes dans l'équipe de développement avec un accès complet à tous les environnements. Il s'agit généralement de la personne responsable de la correction des correctifs, etc. Bien que cela soit quelque peu risqué, il s'agit d'un compromis entre la confiance que vous accordez au développeur, la rapidité avec laquelle vous voulez que les choses soient corrigées et les risques impliqués dans la falsification du système ou la divulgation d'informations dans le système. .

J'ai travaillé dans un grand magasin informatique et nous avions un accès en lecture à la production pour la plupart des gens. En tant que développeur principal, j'avais également des autorisations sur la base de données de production. Je devais toujours suivre les mêmes directives que les administrateurs système et les administrateurs de base de données en termes de processus et de paperasse, mais je pouvais également apporter une correction urgente si nécessaire.

Bill Leeper
la source
0

Il y a un problème connexe que la plupart d'entre nous oublient - nous ne sommes peut-être pas les seuls à utiliser la base de données! Nous avons tendance à tenir cela pour acquis, mais nous ne devrions pas. Même les petits sites peuvent demander aux gens d'affaires d'exécuter des outils tiers sur la base de données pour leurs rapports. Les sites d'entreprise auront presque toujours plusieurs utilisateurs des tables de base de données et votre «petit» changement peut casser leurs applications et vice versa.

Donc, cela doit être la première question. Le deuxième doit être le personnel disponible - j'ai travaillé sur des sites qui avaient des administrateurs système qui protégeaient leur gazon mais n'étaient vraiment pas si bons. (C'est probablement pourquoi ils étaient si territoriaux - ils savaient qu'ils attraperaient beaucoup de chaleur si quelqu'un regardait autour.) Parfois, vous devez avoir plus d'accès que vous ne le souhaiteriez.

Mais dans un monde idéal, je suis d'accord avec les arguments avancés par d'autres personnes. Je ne veux pas avoir accès aux données en direct car, franchement, je ne veux pas de responsabilité. Pensez-y - si j'ai un accès opérationnel et qu'il y a une brèche, je devrai passer beaucoup de temps à prouver que je n'ai rien à voir avec cela. Je devrais peut-être montrer que je n'ai pas modifié les données pour des raisons personnelles, etc. De nombreux sites prennent la confidentialité très au sérieux, en particulier. sites gouvernementaux.

Je ne veux même pas un accès en écriture / administrateur au système du groupe de test. Si je ne peux pas faire quelque chose sur le système de production, je ne veux pas pouvoir le faire sur les systèmes de test. L'accès en lecture est l'exception car il est nécessaire pour comprendre ce qui se passe.

Les systèmes de développement, individuels et départementaux, sont une autre histoire. Mais même ici, dans la pratique, il est généralement préférable d'exécuter toutes les modifications de la base de données par le biais d'une personne ponctuelle au lieu de laisser chacun faire son propre travail.

user20775
la source
0

Je suis totalement d'accord avec toutes les réponses, disant "le moins de privilèges possible pour les développeurs sur les bases de données prod". Mais pour être honnête, qui peut refuser aux développeurs l'accès à la base de données s'ils veulent l'obtenir. Avec suffisamment de volonté (que ce soit criminel ou pour de bon), ils obtiendront l'accès nécessaire.

Qui peut les empêcher de mettre un simple éditeur SQL dans l'application? De cette façon, ils peuvent utiliser la base de données avec les privilèges de l'application. Dans la plupart des cas, c'est tout ce qui est nécessaire. Lorsque la base de données est configurée en toute sécurité, ils peuvent ne pas avoir le privilège de créer ou de supprimer des objets, mais ils ont au moins un accès en lecture et en écriture aux données.

J'ai déjà ici les gens qui pleurent. Mais soyez honnête avec vous-même, vous ne contrôlez pas complètement l'application déployée en production, à moins que vous ne l'écriviez vous-même (et pas même alors, pensez aux bibliothèques). Et pour tous les développeurs, comme Erin l'a déjà dit, vous êtes également responsable de l'environnement de production, pas seulement des opérateurs. Utilisez donc vos privilèges à bon escient.

Christian
la source