Ich habe einen Benutzer angelegt, aber das Passwort vergessen
mysql> erstelle Benutzer 'blayo' @ '%' identifiziert mit 'right';
Welches Linux-Kommandozeilen-Tool kann das Passwort genauso verschlüsseln wie mysql 5.5?
mysql> wähle Passwort, Benutzer von mysql.user ------------------------------------------ + ------- + * 920018161824B14A1067A69626595E68CB8284CB | blayo |
... um sicher zu gehen, dass ich die richtige benutze
$ tool richtig * 920018161824B14A1067A69626595E68CB8284CB
password
mysql
encryption
Philippe Blayo
quelle
quelle
blayo
? Das ist definitiv schneller, als Billionen möglicher Zeichenkombinationen zu durchsuchen, um die richtige zu finden.Antworten:
Nun, der triviale (vielleicht betrügerische ) Weg wäre:
Dies erzeugt ein Passwort unter Verwendung des von Ihrer Version von mysql verwendeten Passwort-Hashing-Schemas. [ EDIT : hinzugefügt -NB, die Kunst der Beseitigung der Spaltennamen und ASCII - Tabelle erhält.]
quelle
mysql
es aus dem Bash-Verlauf ausblenden, und Sie können esSET sql_log_off=ON;
direkt vor dem verwendenSELECT ...
, um es aus dem MySQL-Protokoll auszublenden..mysql_history
) alle Anweisungen ignoriert passende*PASSWORD*
und 2. server für mehrere stmts (außerSELECT
). Siehe: MySQL 5.7 - Handbuch - Passwörter und Protokollierung und MySQL 5.7 - Handbuch - MySQL-Client-ProtokollierungEinige Einzeiler:
MySQL (möglicherweise müssen Sie -u (Benutzer) -p hinzufügen):
Python :
Perl :
PHP :
Ruby :
Alle Ausgaben:
quelle
Es macht mich immer noch wahnsinnig, dass es MySQL nichts ausmacht, Passwörter in der Befehlszeile und in Protokollen zu verschleiern. Und das ist der einzige Grund, warum ich eine Antwort hinzufüge, anstatt nur die Antwort von @Gilles zu kommentieren.
Also, natürlich, Sie könnten einfach als Administrator bei MySQL anmelden und ein neues Kennwort für Ihren blayo-Benutzer festlegen, wie von @patrix vorgeschlagen.
Die Standardmethode hierfür ist jedoch die Verwendung der Funktion password () von MySQL, die ein Klartext-Passwort als Argument verwendet (ernst gemeint?).
Wenn Sie dies tun, belassen Sie die Klartext-Version Ihres MySQL-Benutzerpassworts in Ihrem Bash-Verlauf und in Ihren MySQL-Protokollen, damit jeder, der Zugriff auf diese Protokolldateien hat, später darauf zugreifen kann.
Wäre es nicht besser, ein kleines Dienstprogramm zu haben, das Sie zur Eingabe des Kennworts auffordert, ohne es auf dem Bildschirm oder in Ihren Protokollen wiederzugeben, und dann den resultierenden MySQL-kompatiblen Hash bereitzustellen?
Wenn Sie also die Antwort von @ Gilles ein wenig ändern, wie wäre es mit einem kleinen Shell-Skript, das wie folgt Python verwendet. Sie können dies leicht ändern, um eine SQL-Anweisung für Ihre MySQL-Datenbank auszuführen und das Kennwort gleichzeitig festzulegen. Aber auch ohne dies zu tun, kopieren Sie den resultierenden Hash und fügen Sie ihn in eine SQL-Anweisung ein, um die Benutzertabelle zu aktualisieren:
quelle
<!-- language: lang-bsh -->
Zeile hinzugefügt ). Praktisch! Ich mag das. Vielen Dank!Noch eine mit der Shell:
Erläuterung:
echo -n
Ohne Zeilenumbruch druckensha1sum
erste SHA1xxd -r -p
enthexe den Hashsha1sum
zweiter SHA1tr '[a-z]' '[A-Z]'
in Großbuchstaben konvertierenawk '{print "*" $1}'
führend hinzufügen *Mehr Details:
Zwischen 2. und 3. kann ein optionaler
awk '{printf "%s", $1}'
Schritt zum Entfernen von Zeilenumbrüchen und Bindestrichen eingefügt werden. Aber xxd wird sie trotzdem ignorieren (Danke an dave_thompson_085).Außerdem können die Schritte 5 und 6 sofort ausgeführt werden, indem sie durch
{print "*" toupper($1)}
(Dank an dave_thompson_085) ersetzt werden.quelle
awk
tun , um die Großbuchstaben können, und zum Ausgeben eines unvollständigen (letzten) Zeile Terminal ist incovenient:.. | sha1sum | awk '{print "*" toupper($1)}'
. Und Sie brauchen sich keine Sorgen um die NL und sogar den Bindestrich auf der zu machenxxd -r -p
, sie werden ignoriert.Der Hash ist sha1 (sha1 (Passwort)) . Da es kein Salz gibt (was eine gravierende Sicherheitslücke darstellt), können Sie den Hash in einer Tabelle nachschlagen .
Mit nur POSIX-Tools plus
sha1sum
von GNU coreutils oder BusyBox ist sha1 (sha1 (password)) lästig zu berechnen, da dersha1sum
Befehl den Digest hexadezimal ausgibt und es kein Standard-Tool gibt, das in Binärdaten konvertiert werden kann.Python verfügt in seinen Standardbibliotheken über Standardauszüge, sodass es sich um einen einfachen Einzeiler handelt.
Oder mit dem Passwort im Einzeiler:
quelle
read
eingebaute Shell verwenden, um eine Zeile zu lesen. Führen Siestty echo
zuerst aus, wenn Sie das Echo ausschalten undssty +echo
wieder einschalten möchten . In Python können Sie dasgetpass
Modul verwenden.Wenn Sie einen Benutzer erstellt und das Kennwort vergessen haben, sollten Sie dies tun und es ist einfacher.
Das ist mir auch ein Dutzend Mal passiert, als ich 10 Milliarden Dinge gleichzeitig gemacht habe. Der beste Weg, mein Passwort wiederherzustellen, war:
stoppte den MySQL-Server vollständig zuerst
mysqld_safe --skip-grant-tables & ausgegeben
dann habe ich mich als root angemeldet ohne ein Passwort zu vergeben, nur mysql -u mysql-user (es lässt dich nach mysqld_safe rein)
Gehen Sie dann zur Tabelle mysql> user und aktualisieren Sie das Kennwort für den Benutzer
dann gehe zurück und starte mysql neu
Sehen Sie nach, ob das funktioniert, und lassen Sie es uns wissen.
quelle
Ein anderer mit der Shell
... welche Ausgänge:
quelle
MySQL 4.1+ verwendet doppeltes SHA1
Dieser Algorithmus kann problemlos in andere Sprachen portiert werden. Ein Unterschied besteht darin, dass Kennwort-Hashes im Feld "Kennwort auswählen" immer mit einem "*" beginnen.
quelle