Wie beschränken Sie den Zugriff auf die Produktionsumgebung in dem Unternehmen, für das Sie arbeiten?

8

In der Firma, für die ich arbeite, sind Entwickleringenieure (derzeit nur 2 Mitglieder, ich und ein anderer Mitarbeiter) die einzigen Personen, die Zugriff auf die Produktionsdatenbank haben.

Wenn also andere Entwickler eine MySQL-Abfrage in der Produktionsdatenbank ausführen müssen. Sie würden die Abfrage an die beiden Ingenieure senden, damit sie sie ausführen können.

In den folgenden Situationen müssen Befehle für die Produktionsdatenbank ausgeführt werden:

  1. Die Datenbank enthält beschädigte Daten, die Fehler verursachen. Sie führen Befehle aus, um die Fehler zu beheben.

  2. Ein Fehler wird gemeldet. Und sie möchten die aktuellen Werte in der Datenbank sehen.

  3. Einer unserer Kunden möchte seine Daten ändern. Unsere Webanwendung kann die Änderung jedoch nicht durchführen. Wir müssen also MySQL-Befehle direkt an die Datenbank senden, um die Anforderungen des Kunden zu erfüllen.

  4. Das QA-Team erstellte Testkonten in der Produktionsumgebung. Und sie möchten den Status des Kontos ändern, damit sie andere Tests durchführen können.

Dies schafft viele Unterbrechungen für mich, den anderen Mitarbeiter. Wenn wir tagsüber Programme entwickeln, müssen wir häufig den Kontext wechseln, um einige Abfragen auszuführen.

Ich denke nicht, dass dies eine gute Architektur für das Unternehmen ist. Wie steuern Sie die Berechtigungen für die Produktionsumgebung in Ihrem Unternehmen?

Unsere Produktionsdatenbank besteht aus sensiblen Kundeninformationen. Wenn die Daten durchgesickert wären, könnte unser Unternehmen mit einer Geldstrafe von mehreren Millionen Dollar belegt werden.

Brian
quelle

Antworten:

5

Wenn Ihre Frage lautet, wie Datenbankänderungen verwaltet werden sollen, ziehen Sie Flyway in Betracht . Auf diese Weise können Sie Ihre Änderungen über nachverfolgte Konfigurationsdateien in Ihrem Repository steuern und über einen automatisierten und kontrollierten Prozess anwenden. Verwenden Sie dazu Ihre normalen Schritte zur Codeüberprüfung und -werbung.

Wenn die Frage lautet: "Wie bringe ich Entwickler dazu, mich nicht mehr dazu zu bringen, beliebige SQL-Befehle auszuführen?" Änderungen und verhindert, dass vertrauliche Tabellen angezeigt werden. YMMV abhängig vom Layout Ihrer DB.

TheFiddlerWins
quelle
Meine Frage geht um how do I get devs to stop bugging me to run arbitrary SQL commands. Ich denke, ich kann ProxySQL verwenden , um vertrauliche Kundendaten zu maskieren, damit andere Entwickler die Produktionsdatenbank lesen können.
Brian
Versuchen Sie, sie davon abzuhalten, es zu vermasseln oder sensible Daten zu sehen ? Ersteres können Sie ihnen mit so etwas wie mysql-web-ui RO-Zugriff geben. Die zweite erfordert RBAC, wie in der Antwort von Phil W angegeben.
TheFiddlerWins
4

Sie können Datenbankschemata und Datenänderungen mithilfe eines Konzepts namens Datenbankmigrationen in die Quellcodeverwaltung einbetten. Diese können dann in Entwicklungs- und Staging-Umgebungen als Teil eines teilweise automatisierten Bereitstellungsprozesses ausgeführt werden.

In meiner Umgebung (PHP-Webanwendung) verwende ich beispielsweise Doctrine Schema für Schemaaktualisierungen und Yii2-Migrationen für Datenänderungen. Die entsprechenden Befehle sind Teil eines 7-zeiligen Bash-Skripts, das alle erforderlichen Befehle ausführt, um eine Änderung in jeder Umgebung bereitzustellen

jdog
quelle
3

Ich sehe ein erstes Problem: Bei DevOps geht es darum, Teams aufzubauen, die in der Lage sind, eine Anwendung vom Build bis zur Ausnutzung zu verarbeiten.
Damit Ihre Entwickler Zugriff auf die Datenbanken haben sollten, haben Sie verschiedene Fälle angeführt, die für viele Menschen die Realität sind und den Hauptnachteil darstellen, der Sie und Ihren Kollegen in einen Engpass bringt und Ihre eigene Arbeit behindert.

Andere Antworten befassen sich gut mit der Schemaänderung oder geplanten Änderung, die zwar als Teil des Anwendungsbereitstellungsprozesses integriert werden sollte, sie ermöglichen es jedoch nicht, den Live-Zugriffsbedarf schnell zu beheben, wenn ein Entwickler möglicherweise die Datenbank sichern muss, um zu verstehen, was verursacht wurde der Fehler und wie man ihn zum Beispiel behebt.

Dinge wie ProxySQL, die Sie bereits in einem Kommentar zitiert haben, könnten für MySQL-Datenbanken in Ordnung sein. Nur MySQL so zu konfigurieren, dass Dinge protokolliert werden, könnte ebenfalls ein guter Ansatz sein. MySQL bietet ein kommerzielles Audit-Plugin, das möglicherweise das Problem löst, dass Ihre Entwickler auf die Datenbank zugreifen und Ihre Anforderungen erfüllen können CISO-Anforderungen, um zu verfolgen, was getan wird.

Wenn Sie mehr als nur eine MySQL-Datenbank haben und deren Zugriff überwachen müssen, kann es umständlich sein, jedes System so zu konfigurieren, dass Aktionen von Protokollbenutzern und keine Anwendungsaktionen überwacht werden. Es könnte noch schlimmer sein, die Dinge geschlossen zu halten. Ein Entwickler wird eines Tages eine DB-Shell in eine Anwendung integrieren, um diese Straßensperre zu umgehen, und sie wird schließlich ohne ordnungsgemäße Zugriffskontrolle in Produktion gehen und alle Daten offenlegen. Ich rate Ihnen dringend, Ihre Fragen zu stellen Unternehmen, um diese Richtlinie zu überprüfen.

Es gibt eine kommerzielle Lösung, von der ich weiß, dass sie helfen kann (und die Überwachung von mehr als nur DB-Anforderungen ermöglicht): strongDM . Sie ermöglicht auch die Überwachung von SSH- und RDP-Sitzungen, als ob Ihre Entwickler Zugriff auf DB benötigen. Wahrscheinlich benötigen sie auch Zugriff auf die Computer, auf denen die Anwendungen zu Debugging-Zwecken gehostet werden.

Tensibai
quelle
0

... ich und ein anderer Mitarbeiter ... sind die einzigen Personen, die Zugriff auf die Produktionsdatenbank haben.

Das ist eine gute Ausgangsposition.
Allzu oft versuchen DBAs, die Stalltür zu schließen, nachdem das Pferd weggelaufen ist.

Wenn also andere Entwickler eine MySQL-Abfrage in der Produktionsdatenbank ausführen müssen ...

Frage:
Warum führen Entwickler etwas gegen die Produktionsdatenbank aus?

Wie steuern Sie die Berechtigungen für die Produktionsumgebung in Ihrem Unternehmen?

Rollenbasierte Zugriffskontrolle.

Benutzer erhalten Zugriff auf jede Datenbank, wenn dies für ihre Jobrolle erforderlich ist, und Rollen werden verwendet, um ihnen Zugriff auf die Tabellen in jeder Datenbank zu gewähren. Der Prozess, mit dem diese Konten erstellt und Rollen vergeben werden, wird zentral verwaltet und streng geprüft.

Entwickler sollten niemals "praktischen" Zugriff auf Aktualisierungen außerhalb ihrer Entwicklungsdatenbanken haben. Alles andere sollte über vorbereitete, kontrollierte (und vorzugsweise automatisierte) Kanäle geschrieben, getestet, geprüft und freigegeben werden.

Phill W.
quelle