Ausgangssituation

Die Ausgangssituation: Es gibt hunderte MySQL-Datenbanken mit jeweils dutzenden User-Rollen. Die IT-Landschaft wird von mehreren Administratoren verwaltet. Sich einen Überblick über die aktuelle Konfiguration der verwendeten Datenbanken, den Rollen und den Zugriffsrechten auf den verschiedenen Virtuellen Maschinen zu verschaffen ist ohne zentrales Konfigurations-Management sehr aufwendig.

Das die Einführung eines Konfigurations-Management nicht kompliziert und aufwendig sein muss, lässt sich an einem Beispiel mit Ansible und Salt Stack zeigen.

Vorüberlegung

Die Konfiguration von Usern und Zugriffsrechten in einer MySQL-Datenbank Erfolg über das Komandozeilen-Tool mysql:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';


Die Syntax ist weder kompakt noch intuitiv. Die Gefahr, das sich Syntax Fehler einschleichen ist deshalb sehr hoch. Daher gehen viele Administratoren auch lieber den Weg über phpMyAdmin. Das Problem mit phpMyAdmin ist allerdings, das sich die Konfiguration nicht versionieren lässt und sich so die Änderungsgeschichte nicht nachvollziehen lässt. Zudem kann ein unzureichend gewartetes phpMyAdmin ein mögliches Sicherheitsrisiko darstellen.

Lösungsansatz mit Salt Stack

Wenn man Salt Stack als Konfigurationsmanagement verwendet, kann auf bereits vorhandene Salt Stack-Module als Lösung zurückgegriffen werden um eine MySQL-Datenbanken zu konfigurieren. Die Syntax ist im bekannten und gut zu lesenden YAML-Format gehalten. Der folgende Auszug sorgt dafür das dem User "foobar" die SQL-Befehle select, insert, update und create in der Datenbank "foobar.*" erlaubt werden.

 dev_foobar-mysql-grants:
   mysql_grants.present:
    - grant: select,insert,update,create
    - database: foobar.*
    - user: foobar
    - host: localhost


Zur Verwendung von Salt Stack muss zunächst ein "Salt-Minion" installiert werden der sich gegen den Salt-Master registriert. Die automatische Registrierung von Salt-Minons kann automatisiert werden, z.B. mit dem lifecycle management tool "The Foreman".

Lösungsansatz mit Ansible

Wenn man völlig "Clientless" arbeiten möchte, empfiehlt sich ein Blick auf Ansible. Ansible arbeitet ausschließlich über eine ssh-Verbindung ohne Remote-Client.

---
- name: 4. Create a database user "foobar"
  mysql_user: name=foobar password=foobar priv=*.*:ALL host=localhost state=present


Die Syntax von Konfiguration der Zugriffsrechte ist nicht so stark abstrahiert wie bei Salt Stack, aber immer noch wesentlich kompakter als über einen mysql-Client per SQL.

Kommentieren

Sie können einen Kommentar abgeben, indem Sie das untenstehende Formular ausfüllen. Nur Text. Kommentare werden moderiert.