Wie kann ich ein versehentliches Aufbocken mit einer Produktionsdatenbank verhindern?

31

Erst kürzlich hatte ein Entwickler versehentlich versucht, eine Datenbank für die Produktion wiederherzustellen, obwohl er eine Staging-Kopie hätte wiederherstellen sollen. Dies ist einfach, da die Datenbanknamen ähnlich sind, dh CustomerName_Staging im Vergleich zu CustomerName_Production.

Idealerweise würde ich diese auf völlig getrennten Boxen haben, aber das ist unerschwinglich und genau genommen verhindert es nicht, dass das Gleiche passiert, wenn der Benutzer eine Verbindung zur falschen Box herstellt.

Dies ist per se kein Sicherheitsproblem - es war der richtige Benutzer, der mit der Staging-Datenbank arbeitete, und wenn in der Produktionsdatenbank noch etwas zu tun ist, ist er es auch. Ich hätte gerne einen Einsatzleiter, der diese Bedenken ausräumt, aber das Team ist dafür nicht groß genug.

Ich würde gerne Ratschläge in Bezug auf Übung, Konfiguration und Kontrolle darüber erhalten, wie dies verhindert werden kann.

Chris B. Behrens
quelle
25
Entwickler sollten keinen Schreibzugriff auf die Produktionsdatenbanken und vorzugsweise keinen Zugriff haben.
Michael Hampton
12
@MichaelHampton - Ich und er. Ich bin auch Entwickler. Was schlagen Sie vor?
Chris B. Behrens
10
Separate Benutzerkonten für jede Rolle (dev vs ops / DBA). Und eine Fülle von Vorsicht.
Michael Hampton
2
Ich rate dringend, dass Sie Ihre Produktionsumgebung auf einer separaten Box haben. Andernfalls müssen Staging und Produktion Ressourcen gemeinsam nutzen - Festplatte, CPU usw. - und wenn Staging eine Ressource monopolisiert, leidet möglicherweise Ihre Produktionsumgebung.
Thorbjørn Ravn Andersen
1
Haben Sie einfach separate Benutzer / Passwörter für diese Datenbanken.
Neutrinus

Antworten:

32

Wenn Sie dies häufig tun, automatisieren Sie es. Und da Sie beide Entwickler sind, sollte sich das Schreiben von Code in Ihrem Steuerhaus befinden. :) Im Ernst ... durch die Automatisierung können Sie Dinge tun wie:

  • Stellen Sie sicher, dass Sie auf dem richtigen Server wiederherstellen (dh keine dev -> prod-Wiederherstellung)
  • Stellen Sie sicher, dass es sich um den richtigen Datenbanktyp handelt (in Ihrem Fall "Staging" und "Produktion").
  • Finden Sie anhand der Sicherungstabellen in msdb heraus, welche Sicherungen automatisch wiederhergestellt werden sollen

Und so weiter. Sie sind nur durch Ihre Vorstellungskraft begrenzt.

Ben Thul
quelle
1
Das ist eine interessante Idee ... Wir haben bereits Code, der Datenbankwiederherstellungen verwaltet (für automatisierte Tests). Wir könnten eine Abstraktionsebene dazwischen setzen, die nur auf Inszenierung
Chris B. Behrens
11
Jetzt denkst du mit Portalen. :)
Ben Thul
4
Bei automatisierten Jobs, die sich auf die Produktion auswirken, möchte ich einen manuellen Schritt hinzufügen, bei dem der Benutzer das Wort "Produktion" eingeben muss, um die Wahrscheinlichkeit zu verringern, dass er denkt, dass er beispielsweise das Staging-Äquivalent betrachtet.
Joe Lee-Moyet
2
Ich habe downvoted, da niemand standardmäßig Zugang zur Produktion haben sollte. Sie müssen über ein spezielles Verfahren verfügen, um ein Produktpasswort abzurufen. Es ist unbequem, aber wirklich das Minimum.
OliverS
1
@BenThul Für mich ist es immer noch die richtige Lösung, ein anderes Konto für den Produktzugriff hinzuzufügen und es einen weiteren Schritt unbequemer zu machen. Es ist nicht erforderlich, dass die DEV 2 Minuten spart, sondern dass die DB wiederhergestellt wird, die perfekt auf ein Produktkonto verschoben werden kann.
OliverS
32

Ich bin mit der Annahme in der Frage nicht einverstanden - das ist Sicherheit -, aber ich bin auch nicht einverstanden, dass Automatisierung den Tag für sich retten wird. Ich werde mit dem Problem beginnen:

Sie sollten nicht versehentlich irgendetwas mit der Produktion anfangen können!

Dazu gehört, dass Dinge versehentlich automatisiert werden.

Sie verwechseln die Systemsicherheit mit Konzepten wie "Wer darf was?". Ihre Entwicklungskonten sollten nur in der Lage sein, auf ihre Kopien, den Versionskontrollserver und die Entwicklerdatenbank zu schreiben. Wenn sie die Produktion lesen / schreiben können, können sie gehackt und ausgenutzt werden, um Kundendaten zu stehlen, oder (wie Sie gezeigt haben) können sie falsch behandelt werden, um Kundendaten zu verlieren.

Sie müssen zunächst Ihren Workflow sortieren.

  • Ihre Entwicklerkonten sollten in der Lage sein, auf ihre eigenen Kopien zu schreiben, die Versionskontrolle durchzuführen und möglicherweise von der Versionskontrolle in eine Testumgebung zu ziehen.

  • Sicherungsbenutzer sollten nur in der Lage sein, aus der Produktion zu lesen und in Ihren Sicherungsspeicher zu schreiben (der entsprechend geschützt sein sollte).

  • Für andere Lese- / Schreibvorgänge in der Produktion ist eine spezielle und unpraktische Authentifizierung erforderlich . Sie sollten nicht hineingelangen können oder vergessen, dass Sie angemeldet sind. Die physische Zugriffskontrolle ist hier hilfreich. Smartcards, Kippschalter zum Aktivieren des Kontos und gleichzeitiger Dual-Key-Zugriff.

    Der Zugriff auf die Produktion sollte nicht etwas sein, das Sie jeden Tag tun müssen. Der Großteil der Arbeit sollte auf Ihrer Testplattform und in Bereitstellungen außerhalb der Geschäftszeiten erfolgen, die nach sorgfältiger Prüfung in der Produktion durchgeführt wurden. Eine kleine Unannehmlichkeit wird dich nicht töten.

Automatisierung ist Teil der Lösung.

Ich bin nicht blind für die Tatsache, dass der vollständige Turnaround (Hochladen auf VCS, Überprüfen der Abdeckung, Abrufen auf den Testserver, Ausführen automatisierter Tests, erneute Authentifizierung, Erstellen eines Backups, Abrufen von VCS) ein langer Prozess ist.

Hier kann die Automatisierung helfen, so Bens Antwort. Es gibt viele verschiedene Skriptsprachen, die das Ausführen bestimmter Aufgaben erheblich vereinfachen. Stellen Sie nur sicher, dass Sie es nicht zu einfach machen, dumme Dinge zu tun. Ihre Schritte zur erneuten Authentifizierung sollten immer noch ausgesprochen (und falls gefährlich) sein. Sie sollten unpraktisch und schwer zu bewerkstelligen sein , ohne nachzudenken.

Aber alleine ist Automatisierung schlimmer als nutzlos. Es hilft dir nur, größere Fehler mit weniger Gedanken zu machen.

Geeignet für Teams aller Größen.

Mir ist aufgefallen, dass Sie auf die Größe Ihres Teams hingewiesen haben. Ich bin ein Mann und habe es selbst durchgemacht, weil nur eine Person einen Unfall hat. Es ist ein Aufwand, aber es lohnt sich. Sie erhalten eine viel sicherere und sicherere Entwicklungs- und Produktionsumgebung.

Oli
quelle
2
Darüber hinaus möchte ich zwei benannte Konten pro Benutzer verwenden. Eines ist für die normale Benutzeranmeldung, den normalen Betrieb, die tägliche Arbeit usw. vorgesehen, während das zweite Konto (normalerweise mit einer Art Suffix wie einem + oder einem Unterstrich) die vollen Rechte für Produkte und Entwicklungen hat, die der Benutzer benötigt. Auf diese Weise muss der Benutzer eine aktive Entscheidung treffen, um zu stoßen, anstatt zu entwickeln. Dies ähnelt dem oben beschriebenen Punkt 3, erfordert jedoch keine signifikante zusätzliche Infrastruktur oder Kosten, um den Wert zu demonstrieren.
user24313
3
Es ist auch wichtig, dass Sie sich nicht angewöhnen, etwas anderes als die Wartung von Produkten in Ihrem Produktkonto zu tun.
Eric Lloyd
Woher bekomme ich eine dieser Dual-Key-Geräte mit simultaner Drehung und wird sie mit USB geliefert?
Lilienthal
Etwas anderes, das hilfreich sein könnte, ist die vollständige Automatisierung von Prozeduren (mit einem oder zwei Klicks) in Staging und Entwicklung, jedoch nicht die vollständige Automatisierung von Produktionsbereitstellungen. Die manuelle Fernsteuerung in der Box, um die Produktion zu steuern, jedoch nicht in anderen Umgebungen, ist ein wesentlicher Unterschied in Bezug auf die Benutzerfreundlichkeit, wie Sie vorschlagen. (Sie könnten immer noch alle erforderlichen Schritte ausschreiben und dieses Skript in allen Umgebungen verwenden. Ich meine, Sie müssten die Ausführung dieser Skripte für die Produktion manuell auslösen.) Dies kann natürlich zusätzlich zur Art der Authentifizierung erfolgen Verfahren, die Sie empfehlen.
jpmc26
1
@Lilienthal Es war eine Metapher für Hochsicherheitstheater, aber Sie konnten jedem Entwickler nacheifern, dass billig angreifende USB-Sticks bei der Ausführung gefährlicher Dinge mindestens zwei ihrer Seriennummern überprüfen lassen. In größeren Teams können Sie dann protokollieren, wer die Produktion stört, und die richtigen Personen zur Verantwortung ziehen, wenn alles schief geht.
Oli
12

Einer meiner Mitarbeiter hat einen interessanten Ansatz. Sein Endfarbenschema für die Produktion ist flüchtig . Grau und Rosa und schwer zu lesen, was theoretisch sicherstellen soll, dass er wirklich schreiben wollte, was auch immer er schreibt.

Ihre Laufleistung kann variieren ... und ich muss wahrscheinlich nicht sagen, dass sie für sich genommen kaum kugelsicher ist. :)

Robhol
quelle
2
Ich verwende auch einen großen roten Hintergrund für Terminals / DB-Verbindungen zu Produktionsservern sowie leuchtend rote Hintergrundbilder für Administrationsaufgaben auf PCs ...
Falco
Ja, das habe ich mir gedacht. Machen Sie die Produktion Feuerwehrauto rot ...
Chris B. Behrens
Farbcodierung hilft. Genau wie in einer IDE.
Thorbjørn Ravn Andersen
1

Entwickler sollten das Kennwort für die Produktionsdatenbank nicht kennen. Das Passwort sollte zufällig und nicht einprägsam sein - so etwas wie das Ergebnis von Tastatur-Mashing ( Z^kC83N*(#$Hx). Ihr Entwicklerpasswort kann $YourDog'sNameoder correct horse battery stapleoder was auch immer sein.

Sicher, Sie können herausfinden, wie das Kennwort lautet, insbesondere wenn Sie ein kleines Team sind, indem Sie die Konfigurationsdatei der Clientanwendung lesen. Dies ist der einzige Ort, an dem das Produktpasswort existieren sollte. Dies stellt sicher, dass Sie sich absichtlich anstrengen müssen, um das Kennwort für das Produkt zu erhalten.

(Wie immer sollten Sie Punkt-zu-Zeitpunkt-Sicherungen für Ihre Produktionsdatenbank durchführen. Archivieren Sie beispielsweise mit MySQL die Binärprotokolle als inkrementelle Sicherungen. Archivieren Sie für PostgreSQL die Write-Ahead-Protokolle. Dies ist Ihr letzter Schutz für jede Art von Katastrophe, selbstverschuldet oder auf andere Weise.)

200_erfolg
quelle
Dem kann ich nicht voll und ganz zustimmen, da es in einer realistischen großen Umgebung ziemlich regelmäßig Fälle gibt, in denen Entwickler / Administratoren auf die Produktionsdatenbank zugreifen müssen. Sicher, in einer perfekten Welt mit einem fehlerfreien System sollte dies niemals passieren, aber in den meisten Systemen muss man einige produktionskritische Daten von Hand reparieren ... Ich bin also bei Oli, die Anmeldung in der Produktion sollte unpraktisch, aber machbar sein
Falco
1
@ Falco Genau das schlage ich aber vor. Unbequem aber machbar.
200_erfolg
Das Problem bei Ihrer Vorgehensweise ist nur, dass die Zeit zählt, wenn eine Notsituation vorliegt und die Produktion ausfällt. Ihre Entwickler sollten also wissen, wo sie das Passwort finden und es schnell erhalten können. Wenn sie nachfragen müssen, durchsuchen Sie das Repository und die Konfigurationsdateien und versuchen Sie, wertvolle Zeit = Geld zu verlieren. Ich möchte das Passwort lieber an einem Ort haben, an dem jeder weiß, wo er suchen muss, aber es ist immer noch unpraktisch, aber wenn nötig schnell
Falco
2
@Falco Da die prod-Umgebungen die dev-Umgebungen genau widerspiegeln sollten, befindet sich die Konfigurationsdatei auf dem prod-Server an der gleichen Stelle wie auf den dev-Rechnern. Jeder kompetente Entwickler sollte wissen, wo er suchen muss, und wenn er nicht weiß, wo er suchen muss, möchten Sie diese Verzögerung - genau, um Schäden der in der Frage genannten Art zu vermeiden.
200_success
Das Nichtwissen von Passwörtern verhindert keine Unfälle. Ganz im Gegenteil, es ist eine Motivation, das Kennwort nur einmal nachzuschlagen. Danach kann der Entwickler möglicherweise den Bash-Verlauf verwenden oder sogar einen Alias ​​für die Verbindung mit der Datenbank erstellen. Und dann kommt es eher zu Unfällen.
k0pernikus
0

Die kurze Antwort lautet RBAC - rollenbasierte Zugriffskontrolle.

Ihre Berechtigungen für alle Umgebungen müssen unterschiedlich sein - und so ärgerlich Dinge wie die Benutzerkontensteuerung auch sind, Sie benötigen sie: insbesondere für PROD-Umgebungen.

Es gibt NIEMALS einen Grund für Entwickler, direkten Zugang zu Prod zu haben - unabhängig davon, wie klein die Organisation / das Team ist. Ihr "Dev" trägt möglicherweise auch die Hüte "Stage" und "Prod", muss jedoch über unterschiedliche Berechtigungen und Prozesse verfügen, um unterschiedliche Umgebungen zu treffen.

Nervt es Absolut. Aber verhindert es, dass Ihre Umgebung kaputt geht? Absolut.

Labyrinth
quelle
0

Eine schnelle und einfache Lösung: Verwenden Sie zwei verschiedene Benutzerkonten, eines für Ihre normale Entwicklungsarbeit, die nur Zugriff auf die Entwicklungsdatenbank hat, und eines für die eigentliche Bearbeitung der Produktionsdatenbank mit vollem Zugriff darauf. Auf diese Weise müssen Sie das von Ihnen verwendete Konto aktiv ändern, bevor Sie Änderungen in der Produktion vornehmen können. Dies sollte ausreichen, um versehentliche Fehler zu vermeiden.

Der gleiche Ansatz kann angewendet werden, wenn Sie über zwei Websites oder zwei Server oder zwei vollständige Umgebungen verfügen: ein Benutzerkonto für die Entwicklung ohne Zugriff (oder zumindest ohne Schreibzugriff ) auf die Produktion, ein anderes Benutzerkonto für die Arbeit am Produktionssystem ( s).


Dies ist der gleiche Ansatz wie ein Systemadministrator, der über ein Standardkonto ohne Administratorrechte für Routinearbeiten (Lesen von E-Mails, Surfen im Internet, Verfolgen von Tickets, Ablegen von Arbeitszeittabellen, Verfassen von Dokumentationen usw.) und ein separates Konto mit Administratorrechten verfügt, das für den tatsächlichen Betrieb verwendet wird auf Servern und / oder Active Directory.

Massimo
quelle