web-dev-qa-db-fra.com

Comment puis-je empêcher accidentellement la prise de courant avec une base de données de production?

Juste récemment, j'ai eu un développeur d'essayer accidentellement de restaurer une base de données à la production, lorsqu'il aurait dû être restauré à une copie de mise en scène. C'est facile à faire, étant donné que les noms de base de données sont similaires, c'est-à-dire Customername_Sting versus Customername_Production.

Idéalement, je les aurais sur des boîtes entièrement séparées, mais cela coûte prohibitif et, strictement parlant, cela n'empêche pas la même chose de se produire si l'utilisateur se connecte à la mauvaise boîte.

Ce n'est pas un problème de sécurité, en soi, il s'agissait de l'utilisateur correct travaillant avec la base de données de stadification et s'il y a du travail à effectuer sur la base de données de production, ce serait aussi. J'aimerais avoir un officier de déploiement pour séparer ces préoccupations, mais l'équipe n'est pas assez grande pour cela.

J'aimerais entendre des conseils en termes de pratique, de configuration et de contrôles sur la manière de l'empêcher.

30
Chris B. Behrens

Si c'est quelque chose que vous voyez vous-même faire souvent, automatisez-le. Et puisque vous êtes les deux développeurs, l'écriture du code devrait être dans votre timonerie. :) Sérieusement si ... en l'automatisant, vous pouvez faire des choses comme:

  • Vérifiez que vous restaurez sur le serveur correct (c'est-à-dire non Dev -> produit de restauration)
  • Vérifiez que c'est le bon "type" de la base de données (dans votre cas, "mise en scène" et "production")
  • Déterminez quelle (s) sauvegarde (s) à restaurer automatiquement en regardant les tables de sauvegarde dans MSDB

Etc. Vous n'êtes limité que par votre imagination.

32
Ben Thul

Je ne suis pas d'accord avec l'hypothèse dans la question - Celui-ci est Sécurité- mais je suis également en désaccord que l'automatisation va sauver la journée seule. Je vais commencer par le problème:

Vous ne devriez pas être capable de accidentellement do quelque chose à la production!

Cela inclut faire des choses automatisées accidentellement.

Vous confondez la sécurité du système avec des concepts tels que "qui est autorisé à faire quoi". Vos comptes de développement ne doivent être en mesure d'écrire à leurs copies, le serveur de contrôle de la version et la base de données DEV. S'ils peuvent lire/écrire une production, ils peuvent être piratés et exploités pour voler des données client ou (comme vous l'avez démontré) peuvent être interrogés dans la perte de données client.

Vous devez commencer par trier votre flux de travail.

  • Vos comptes de développeurs devraient pouvoir écrire à leurs propres copies, contrôle de la version et peut-être tirer de la commande de la version dans un environnement de test.

  • Les utilisateurs de sauvegarde ne doivent être en mesure de lire à partir de la production et d'écrire dans votre magasin de sauvegarde (qui doivent être protégés avec précision).

  • Faire toute autre lecture/écriture sur la production doit nécessiter une spéciale et inconvenant authentification. Vous ne devriez pas être capable de vous glisser ou d'oublier que vous êtes connecté. Le contrôle d'accès physique est utile ici. Cartes à puce, bascule à "bras" le compte, accès à double clé simultané.

    L'accès à la production ne devrait pas être quelque chose que vous devez faire tous les jours. La plupart des travaux devraient figurer sur votre plate-forme de test et vos déploiements hors des heures réalisés à la production après un examen minutieux. Un petit inconvénient ne vous tuera pas.

L'automatisation est partie de la solution.

Je ne suis pas aveugle au fait que le retournement complet (télécharger sur VCS, vérifiant la couverture, tirer sur le serveur de test, exécuter des tests automatisés, la récidivation, la création d'une sauvegarde, la traction de VCS) est un processus long.

c'est où l'automatisation peut aider, par réponse de Ben. Il existe de nombreuses langues de script différentes qui font de nombreuses tâches, beaucoup plus facilement. Assurez-vous simplement que vous ne faites pas trop facile de faire des choses stupides. Vos étapes de récidivation devraient toujours être prononcées (et si dangereuses) elles devraient être gênant et difficile à faire sans réfléchir.

Mais seul , l'automatisation est pire que inutile. Cela vous aidera simplement à faire des erreurs plus grandes avec moins de pensée.

Convient aux équipes de toutes tailles.

J'ai remarqué que vous remarquez la taille de votre équipe. Je suis un gars et je me suis mis à travers cela parce que cela ne prend qu'une personne pour avoir un accident. Il y a une surcharge mais ça vaut le coup. Vous vous retrouvez avec un environnement de développement et de production beaucoup plus sûr et beaucoup plus sûr.

33
Oli

La réponse courte est la RBAC - Contrôle d'accès basé sur le rôle.

Vos autorisations à tous les environnements doivent être différentes - et aussi gênantes que des choses comme des choses comme UAC, vous en avez besoin: surtout pour les environnements Prod.

Il y a JAMAIS une raison de Devs d'avoir un accès direct à prod - quelle que soit la petite organisation de l'organisation/de l'équipe. Votre "Dev" peut également porter la chapeau "Stade" et "PROD", mais il doit avoir des informations d'identification et des processus différents pour atteindre des environnements différents.

Est-ce ennuyeux? Absolument. Mais est-ce que [aide] empêche de borking vos environnements? Absolument.

1
warren

Les développeurs ne devraient pas connaître le mot de passe à la base de données de production. Le mot de passe produit doit être aléatoire et non mémorable - quelque chose comme le résultat de la purée de clavier (Z^kC83N*(#$Hx). Votre mot de passe de dev peut être $YourDog'sName ou correct horse battery staple ou peu importe.

Bien sûr, vous pourriez découvrir ce que le mot de passe est, surtout si vous êtes une petite équipe, en consultant le fichier de configuration de l'application clientèle. C'est le seul endroit où le mot de passe produit devrait exister. Cela garantit que vous devriez faire un effort délibéré pour obtenir le mot de passe Prod.

(Comme toujours, vous devez avoir des sauvegardes de pointe pour votre base de données de production. Par exemple, avec MySQL, archivez les journaux binaires sous forme de sauvegardes incrémentielles. Pour PostgreSQL, archivez les journaux de rétrécissement. C'est votre protection de la dernière station pour tout type de catastrophe, auto-infligé ou autre.)

1
200_success

Une solution simple et rapide: utilisez deux comptes d'utilisateurs différents, un pour votre travail de développement normal qui n'a accès que dans la base de données de développement et une différenciée pour fonctionner réellement sur la base de données de production, avec un accès complet à celui-ci. De cette façon, vous devrez modifier activement le compte que vous utilisez Avant de pouvoir modifier la production, ce qui devrait suffire à prévenir les erreurs accidentelles.

La même approche peut être utilisée si vous avez deux sites Web ou deux serveurs ou deux environnements entiers: un compte d'utilisateur pour le développement sans accès (ou au moins non écrire Accès) à la production, une autre Compte d'utilisateur pour travailler sur le ou les systèmes de production.


Il s'agit de la même approche qu'un sysadmin ayant un compte standard non administrateur pour les travaux de routine (lecture de courrier électronique, de navigation Web, de suivi des billets, de filtrage de titres, de la documentation de la rédaction, etc.) et d'un compte distinct d'administration à utiliser lorsqu'il est réellement opérationnel. sur les serveurs et/ou Active Directory.

0
Massimo