Jak testujesz poświadczenia MySQL z wiersza poleceń na serwerze Linux?
Jak testujesz poświadczenia MySQL z wiersza poleceń na serwerze Linux?
Odpowiedzi:
@ Phil's Answer i @ Mr.Brownstone's Answer powinny wystarczyć na twoje pytanie, więc +1 dla obu z nich.
W poniższych przypadkach załóżmy, że logujesz się przy użyciu nazwy użytkownika myuser
Po nawiązaniu połączenia z mysql należy uruchomić następujące zapytanie:
SELECT USER(),CURRENT_USER();
Czasami są inni. Może to dać ci wgląd w to, dlaczego możesz zalogować się do mysql.
Oto kolejne zapytanie, które musisz uruchomić:
SELECT CONCAT('''',user,'''@''',host,'''') dbuser,password
FROM mysql.user WHERE user='myuser';
To pokaże ci, w jaki sposób możesz się zalogować jako myuser
.
Jeśli widzisz 'myuser'@'localhost'
, możesz uwierzytelnić się z poziomu serwera DB.
Jeśli widzisz 'myuser'@'127.0.0.1'
i nie widzisz 'myuser'@'localhost'
, możesz ponownie uwierzytelnić się z poziomu serwera DB, ale musisz określić w --protocol=tcp
wierszu polecenia.
Jeśli widzisz 'myuser'@'%'
, możesz wykonywać zdalne logowanie z dowolnego serwera.
Jeśli widzisz 'myuse'r@'10.20.30,%'
, możesz wykonywać zdalne logowanie tylko od 10.20.30.% Netblock.
Gdy zobaczysz, co „mysql.user” ma dla twojego użytkownika, możesz zezwolić lub ograniczyć mojemu użytkownikowi z logggin w jeden sposób, a nie w drugi.
Jeśli chcesz po prostu sprawdzić, czy hasłem myuser
jest whateverpassword
, możesz wykonać następujące czynności:
SELECT COUNT(1) Password_is_OK FROM mysql.user
WHERE user='myuser'
AND password=PASSWORD('whateverpassword');
Możesz sprawdzić z wiersza poleceń w następujący sposób:
PASSWORDISOK=`mysql -uroot -p... -ANe"SELECT COUNT(1) Password_is_OK FROM mysql.user WHERE user='myuser' AND password=PASSWORD('whateverpassword')"`
Jeśli nie jesteś root
i chcesz przetestować tylko mojego użytkownika, możesz to zrobić:
PASSWORDISOK=`mysqladmin -umyuser -pwhateverpassword ping | grep -c "mysqld is alive"`
Jeśli otrzymasz 1, hasło dla użytkownika jest sprawdzane jako dobre.
mysql -h host -u user -p<whatever> -e"quit"
Dzięki temu możesz użyć tego samego ciągu połączenia, którego używasz do programowego wysyłania zapytań do serwera. Możesz dodać || exit 1
na końcu automatyczne wyjście z nieprawidłowych argumentów. Możesz również przekierować stderr, /dev/null
jeśli nie podoba Ci się automatycznie wygenerowany komunikat o błędzie MySQL.
Możesz użyć następującego polecenia (zakładając, że w ścieżce skonfigurowano mysql):
mysql -h host -u użytkownik -p
Wystarczy zastąpić hosta i użytkownika prawidłowymi wartościami, a następnie pojawi się monit o podanie hasła.