2 Minuten Lesezeit (387 Worte)

Kurz und gut - Episode #02 Was ein Zufall. Zufällige Passwörter in MySQL

Ich werde in Seminaren, Workshops oder in Kundenprojekten in Sachen MySQL immer mal wieder mit Dingen konfrontiert, auf die ich ad hoc keine Antwort habe bzw. mit denen ich noch keine Erfahrung gesammelt habe.

Das Problem

In dieser Folge geht es um ein Problem eines Kunden, der häufig neue User-Accounts bereitstellen muss. Die Frage war, ob man „einfach“ direkt mit MySQL zufällig Einmal-Passworte generieren kann.

Unser Kunde muss mehrfach täglich User-Accounts anlegen und diese Kunden bereitstellen. Bis dato wurde dafür ein definiertes Standardpasswort festgelegt, welches der Kunde direkt beim ersten Login ändern musste.

mysql> create user 'app1' identified by 'change_on_install' password expire;

bash-4.4# mysql --user=app1 --password="change_on_install" --host=sakila --port=3306

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3203
Server version: 8.0.32

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
 

Wie zu erkennen ist, muss der User direkt nach dem Login sein Passwort ändern. Andere Kommandos, wie selbst ein „show databases“ sind nicht möglich.

mysql> alter user user() identified by 'geheim';
Query OK, 0 rows affected (0.02 sec)
 

Das Problem ist natürlich, dass jedem neuen User erst einmal ein identisches Passwort kommuniziert wurde. Dies ist ein potenzielles Risiko, da man bei Kenntnis von einem anderen User-Account diesen ggf. übernehmen kann, sofern für dieses Konto immer noch das initiale Passwort gültig ist. 

Die Lösung

Ab der Version 8.0.18 kann MySQL zufällig generierte Passwörter erzeugen [1]. Dies geht wie folgt:

mysql> create user 'appX' identified by random password password expire;
+------+------+----------------------+-------------+
| user | host | generated password   | auth_factor |
+------+------+----------------------+-------------+
| appX | %    | NOH)VNfC@r+._@F<<TYq |           1 |
+------+------+----------------------+-------------+
1 row in set (0.01 sec)
 

Die Doppelung des Wortes „password“ in der Syntax oben ist gewöhnungsbedürftig, funktioniert aber natürlich.

Selbstverständlich kann man dieses Verfahren auch nutzen, um einem bereits existierenden User ein neues Password zu geben, wenn er seines vergessen haben sollte:

mysql> alter user 'appX' identified by random password password expire;
+------+------+----------------------+-------------+
| user | host | generated password   | auth_factor |
+------+------+----------------------+-------------+
| appX | %    | SdagFh9Hde]VpxNenyll |           1 |
+------+------+----------------------+-------------+
1 row in set (0.01 sec)
 

Sie haben eine Frage und/oder ein Problem mit MySQL? Sprechen Sie mit uns und nutzen Sie die Kommentarfunktion in unserem Blog!

Principal Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Mittwoch, 08. Mai 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie