News & Events
DBA-Tipp: mysql_config_editor - Der Passwortsafe für ihre Datenbankinstanzen

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

Analog zum Oracle "Secure External Password Store" bietet MySQL seit der Version 5.6.6 die Möglichkeit, eine passwortlose Anmeldung zu konfigurieren.

Die meisten MySQL DBAs werden jetzt denken: "Aber hey, das geht doch schon immer!"
Richtig - Durch das Anlegen einer '.my.cnf'-Datei mit den Inhalten

username=<username>
password=<password>

ist es seither möglich, diese zu bewerkstelligen.

ABER: Das Passwort muss hierbei im Plaintext hinterlegt werden. Eine Anpassung der Berechtigungen auf nur-lesen und nur-schreiben auf diese Datei bildet sicherlich einen Grundschutz vor unerlaubtem Zugriff, jedoch sind unverschlüsselte Passwörter generell eine eher schlechte Idee.

Seit der Version 5.6.6 ist das Tool 'mysql_config_editor',  das die Ablage und gleichzeitige Verschlüsselung der Passwörter erleichtert, in jeder Standardinstallation enthalten. Der 'mysql_config_editor' bietet die Möglichkeit, sogenannte 'login-paths' für mehrere Instanzen - auch per remote -  zu hinterlegen.

Die hierbei erzeugte Datei '.mylogin.cnf' wird im jeweiligen Home-Verzeichnis des Nutzers abgelegt und kann beispielhaft folgene Inhalte enthalten:

[my-login-path-local]
user = root
password = *****
password = *****
host = localhost
[my-login-path-remote]
user = root
password = *****
host = remote-host

Passwort-/ Logindatei anlegen:

mysql_config_editor set --login-path=my-login-path-local
--user=root --host=localhost --password

mysql_config_editor set --login-path=my-login-path-remote
--user=root --host=remote-host --password

Passwort-/ Logindatei anzeigen:

mysql_config_editor print --all

Anmeldung am jeweiligen Login-Path

mysql --login-path=my-login-path-local
mysql --login-path=my-login-path-remote

Beispiel: /etc/logrotate.d/mysql

/u05/mysqldata/server57-01/admin/log/*.log
/u05/mysqldata/server57-01/admin/error/*.err
{
  notifempty
  daily
  rotate 5
  missingok
  compress
  postrotate
    if test -x \
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
        && \
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
        ping &>/dev/null;
    then
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
             flush-logs;
    fi
  endscript
}

Damit sind die Funktionen von 'mysqladmin' abgesichert, aber funktional gehalten, ohne Passwörter im Klartext zu verwenden.

Fazit:

Der mysql_config_editor ist ein eventuell verkanntes Feature, welche die Anmeldung an Datenbankinstanzen sichert und vereinfacht. Gerade beim Einsatz von Skripten ist hier anzuraten den 'mysql_config_editor' mit Loginpfaden zu versehen und zu nutzen.


Newsletter-Archiv

Analog zum Oracle "Secure External Password Store" bietet MySQL seit der Version 5.6.6 die Möglichkeit, eine passwortlose Anmeldung zu konfigurieren.

Die meisten MySQL DBAs werden jetzt denken: "Aber hey, das geht doch schon immer!"
Richtig - Durch das Anlegen einer '.my.cnf'-Datei mit den Inhalten

username=<username>
password=<password>

ist es seither möglich, diese zu bewerkstelligen.

ABER: Das Passwort muss hierbei im Plaintext hinterlegt werden. Eine Anpassung der Berechtigungen auf nur-lesen und nur-schreiben auf diese Datei bildet sicherlich einen Grundschutz vor unerlaubtem Zugriff, jedoch sind unverschlüsselte Passwörter generell eine eher schlechte Idee.

Seit der Version 5.6.6 ist das Tool 'mysql_config_editor',  das die Ablage und gleichzeitige Verschlüsselung der Passwörter erleichtert, in jeder Standardinstallation enthalten. Der 'mysql_config_editor' bietet die Möglichkeit, sogenannte 'login-paths' für mehrere Instanzen - auch per remote -  zu hinterlegen.

Die hierbei erzeugte Datei '.mylogin.cnf' wird im jeweiligen Home-Verzeichnis des Nutzers abgelegt und kann beispielhaft folgene Inhalte enthalten:

[my-login-path-local]
user = root
password = *****
password = *****
host = localhost
[my-login-path-remote]
user = root
password = *****
host = remote-host

Passwort-/ Logindatei anlegen:

mysql_config_editor set --login-path=my-login-path-local
--user=root --host=localhost --password

mysql_config_editor set --login-path=my-login-path-remote
--user=root --host=remote-host --password

Passwort-/ Logindatei anzeigen:

mysql_config_editor print --all

Anmeldung am jeweiligen Login-Path

mysql --login-path=my-login-path-local
mysql --login-path=my-login-path-remote

Beispiel: /etc/logrotate.d/mysql

/u05/mysqldata/server57-01/admin/log/*.log
/u05/mysqldata/server57-01/admin/error/*.err
{
  notifempty
  daily
  rotate 5
  missingok
  compress
  postrotate
    if test -x \
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
        && \
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
        ping &>/dev/null;
    then
        /u01/app/mysql/server/5.7.17/bin/mysqladmin \
             --login-path=server57-01--mysqladmin \
             flush-logs;
    fi
  endscript
}

Damit sind die Funktionen von 'mysqladmin' abgesichert, aber funktional gehalten, ohne Passwörter im Klartext zu verwenden.

Fazit:

Der mysql_config_editor ist ein eventuell verkanntes Feature, welche die Anmeldung an Datenbankinstanzen sichert und vereinfacht. Gerade beim Einsatz von Skripten ist hier anzuraten den 'mysql_config_editor' mit Loginpfaden zu versehen und zu nutzen.