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.