Utworzyłem użytkownika ... ale zapomniałem hasła
mysql> utwórz użytkownika „blayo” @ „%” identyfikowany przez „prawo”;
Które narzędzie wiersza poleceń systemu Linux może szyfrować hasło w taki sam sposób, jak robi to mysql 5.5?
mysql> wybierz Hasło, Użytkownik z mysql.user ------------------------------------------ + ------- + * 920018161824B14A1067A69626595E68CB8284CB | blayo |
... aby mieć pewność, że użyję właściwego
$ narzędzie w prawo * 920018161824B14A1067A69626595E68CB8284CB
password
mysql
encryption
Philippe Blayo
źródło
źródło
blayo
? Jest to zdecydowanie szybsze niż przeglądanie bilionów możliwych kombinacji postaci, aby znaleźć właściwą.Odpowiedzi:
Cóż, trywialny (być może oszukańczy ) sposób polegałby na uruchomieniu:
Spowoduje to wygenerowanie hasła przy użyciu dowolnego schematu haszowania haseł używanego przez twoją wersję mysql. [ EDYCJA : dodano -NB, który pozbywa się nazw kolumn i grafiki tabeli ascii.]
źródło
mysql
aby ukryć go przed historią bash, i możesz użyćSET sql_log_off=ON;
tuż przed,SELECT ...
aby ukryć go w dzienniku MySQL..mysql_history
) ignorując wszystkie instrukcje pasujące*PASSWORD*
i 2. po stronie serwera dla kilka stmts (opróczSELECT
). Patrz: Podręcznik MySQL 5.7 - Hasła i rejestrowanie oraz MySQL 5.7 - Podręcznik - Logowanie klienta mysqlNiektóre liniowce:
MySQL (może wymagać dodania -u (użytkownik) -p):
Python :
Perl :
PHP :
Rubin :
Wszystkie dane wyjściowe:
źródło
Nadal zastanawia mnie, że MySQL nie zawraca sobie głowy zaciemnianiem haseł w wierszu poleceń i dziennikach. I to jest jedyny powód, dla którego dodaję odpowiedź zamiast komentować odpowiedź @Gilles.
Oczywiście, że mógłbyś po prostu zalogować się jako administrator MySQL i ustawić nowe hasło dla blayo użytkownika, jak @patrix sugerowane.
Jednak standardowym sposobem na to jest użycie funkcji hasła () MySQL, która traktuje hasło w postaci zwykłego tekstu jako argument (poważnie?).
Jeśli to zrobisz, pozostawiasz wersję tekstową hasła użytkownika MySQL w swojej historii bash i w logach MySQL, w celu późniejszego łatwego wyszukiwania przez każdego, kto uzyska dostęp do tych plików dziennika.
Czy nie byłoby lepiej mieć małe narzędzie, które pytałoby o hasło, bez echa na ekranie lub w dziennikach, a następnie zapewnia wynikowy skrót zgodny z MySQL?
Tak więc, modyfikując nieco odpowiedź @ Gilles, co powiesz na mały skrypt powłoki korzystający z Pythona, jak poniżej. Możesz to łatwo zmodyfikować, aby uruchomić instrukcję SQL w bazie danych MySQL i ustawić hasło jednocześnie. Ale nawet nie posuwając się tak daleko, po prostu skopiuj i wklej wynikowy skrót do instrukcji SQL, aby zaktualizować tabelę użytkowników:
źródło
<!-- language: lang-bsh -->
linię). Poręczny! Lubię to. Dzięki!Jeszcze jeden za pomocą powłoki:
Wyjaśnienie:
echo -n
drukuj bez podziału liniisha1sum
pierwszy SHA1xxd -r -p
unhex hashsha1sum
drugi SHA1tr '[a-z]' '[A-Z]'
przekonwertować na wielkie literyawk '{print "*" $1}'
dodaj wiodące *Więcej szczegółów:
Między 2. a 3. można wprowadzić opcjonalny
awk '{printf "%s", $1}'
krok do usuwania znaku nowej linii i łącznika. Ale xxd i tak je zignoruje (dzięki dave_thompson_085).Ponadto krok 5 i 6 można wykonać jednocześnie, zastępując je
{print "*" toupper($1)}
(Dzięki dave_thompson_085).źródło
awk
Można wykonać wielkie litery i wyprowadzania niekompletny (ostatniej linii) do zacisku jest niewygodna:.. | sha1sum | awk '{print "*" toupper($1)}'
. I nie musisz się martwić o NL, a nawet myślnikxxd -r -p
, są one ignorowane.Skrót to sha1 (sha1 (hasło)) . Ponieważ nie ma soli (co jest poważną wadą bezpieczeństwa), możesz sprawdzić skrót w tabeli .
Z tylko narzędziami POSIX plus
sha1sum
z GNU coreutils lub BusyBox, sha1 (sha1 (hasło)) jest denerwujące w obliczeniach, ponieważsha1sum
polecenie wypisuje skrót w systemie szesnastkowym i nie ma standardowego narzędzia do konwersji na binarne.Python ma standardowe skróty w swoich standardowych bibliotekach, więc jest to prosty jednowierszowy.
Lub z hasłem w jednej linijce:
źródło
read
wbudowanej powłoki, aby odczytać wiersz; uruchomstty echo
najpierw, jeśli chcesz wyłączyć echo issty +echo
włączyć je ponownie. W Pythonie możesz użyćgetpass
modułu.Jeśli stworzyłeś skrzynkę użytkownika i zapomniałeś hasła, powinieneś to zrobić i jest to łatwiejsze.
Zdarzyło mi się to również kilkanaście razy, gdy robiłem 10 miliardów rzeczy naraz. Najlepszym sposobem na odzyskanie hasła było:
najpierw całkowicie zatrzymał serwer mysql
wydano mysqld_safe --skip-grant-tables &
następnie zalogowałem się jako root bez wydawania hasła, po prostu mysql -u mysql-user (pozwala ci się zalogować po mysqld_safe)
następnie przejdź do tabeli mysql> użytkownika i zaktualizuj hasło użytkownika
następnie wróć i ponownie uruchom mysql
sprawdź, czy to działa, i daj nam znać.
źródło
Kolejny za pomocą powłoki
... które wyjścia:
źródło
MySQL 4.1+ używa podwójnego SHA1
Ten algorytm można łatwo przenieść na inne języki. Różnica polega na tym, że skróty hasła w „wybierz hasło” zawsze zaczynają się od znaku „*”.
źródło