Jak zmusić klienta MySQL do odczytu hasła z mylogin.cnf?

11

Próbuję zmusić klienta mysql do połączenia się z serwerem mysql bez konieczności podawania hasła interaktywnie. Podjęte kroki:

1) Najpierw utwórz plik mylogin.cnf

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2) Plik utworzony pomyślnie:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3) Połącz za pomocą klienta mysql

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Czy jest gdzieś domyślna wartość / konfiguracja, która powoduje, że klient ignoruje hasło w mylogin.cnf? Właściwości użytkownika i hosta zostały poprawnie odczytane z pliku.

Jestem w stanie połączyć się dobrze, jeśli podam hasło w wierszu poleceń:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

Wersja klienta MySQL to 5.6.22, wersja MySQL Server to 5.6.22, zarówno na Oracle Linux 6. Klient i serwer znajdują się na różnych hostach.

Dzięki

Lefteris Koutsoloukas
źródło

Odpowiedzi:

2

Jakkolwiek to zrobisz, prawdopodobnie gdzieś zostanie zapisane hasło. Nawet ścieżka logowania MySQL 5.6 jest łatwo odszyfrowywana przez każdego, kto ma motywację. To ostrzeżenie mówiło, że będzie to łatwe rozwiązanie.

W skrypcie środowiska (np. ~/.profileLub ~/.bashrc) ustaw

alias mysql='mysql -uUser -pPasswd -hHostname'

(oczywiście wpisując żądanego użytkownika, hasło i nazwę hosta).

Po ponownym zalogowaniu się do powłoki powinieneś po prostu to zrobić

mysql

... który użyje twojego aliasu i połączy się z bazą danych i zignoruje wszelkie hasła w .my.cnfplikach.

Uwaga dotycząca bezpieczeństwa: jeśli na serwerze znajdują się inni użytkownicy, możesz chcieć chmod 700 skryptu profilu, aby inni nie mogli uzyskać dostępu do hasła. Każdy administrator z rootem lub sudo będzie mógł nadal to widzieć; nie ma mowy o tym.

Joshua Huber
źródło
Jest to obejście rzeczywistego problemu, ale nic mi nie jest. Akceptuję tę odpowiedź z zastrzeżeniem dla przyszłych czytelników, że właściwym sposobem jest odpowiedź Nawaz, ale to nie działa w moim środowisku z nieznanego powodu. Dzięki!
Lefteris Koutsoloukas
1
-1 to nie odpowiada na zapytanie PO ani nie pozwala na przechowywanie hasła w pliku. hasło jest teraz przechowywane w .profile zamiast .mylogin.cnf. Ale teraz hasło jest wyświetlane przez polecenie ps.
miracle173,
@miracle, zweryfikuj swoje twierdzenie, że ps ujawni hasło. W moich systemach hasło jest zamaskowane jako xxxxxxx na wyjściu ps. Jeśli twój klient MySQL nie działa jak mój, opublikuj wersję mysql i dystrybucję. A czy masz lepszą odpowiedź na aktualne pytanie PO?
Joshua Huber,
2
@joshua: Wskazówki dla użytkownika końcowego dotyczące bezpieczeństwa hasła : „Użyj opcji -pyour_passlub --password=your_passw wierszu poleceń (...) Jest to wygodne, ale niepewne ”.
miracle173,
10

użyj następującego polecenia, aby najpierw ustawić ścieżkę logowania

mysql_config_editor set --login-path = lgpath --user = root -p
hasło

a następnie użyj polecenia poniżej, aby zalogować się do mysql

mysql --login-path = ścieżka lg

Pomoc na temat opcji ścieżki logowania mysql można zobaczyć

mysql_config_editor set --help

Nawaz Sohail
źródło
Próbowałem ustawić jawnie ścieżkę logowania zgodnie z sugestią, ale niestety ma ona takie samo zachowanie: $ mysql_config_editor print --all [lgpath] użytkownik = <użytkownik> hasło = ***** host = <host> $ mysql --login -path = lgpath BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika <<użytkownik> '@ @ <host> (przy użyciu hasła: NIE)
Lefteris Koutsoloukas
3

Miałem ten sam problem co OP, ale odpowiedzi w tym wątku mnie zdezorientowały. Link Vinaya Mandali faktycznie dla mnie zadziałał. Przesłane tutaj dla jasności.

Mój problem:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

Dowodzi to, że mysql_config_editornie obsługuje poprawnie znaków specjalnych w haśle.

Rozwiązanie:

Gdy mysql_config_editorpojawi się monit o podanie hasła, upewnij się, że otaczasz je podwójnymi cudzysłowami („) . Następnie możesz się zalogować.

quexy
źródło
1

Otrzymywałem ten błąd, z wyjątkiem tego, że powiedział (używając hasła: TAK)

Powodem, o którym wspomniał Giovanni, był „#” w haśle. Odkryłem, że obejście polega na wstawianiu cudzysłowów wokół hasła po wyświetleniu monitu. To samo ograniczenie istnieje w przypadku haseł w postaci zwykłego tekstu przy użyciu pliku .my.cnf.

gamorten
źródło
0

Odpowiedź Nawaza jest poprawna. Mam niewiele do dodania. Sugeruję wykonanie kilku prób przy użyciu zmiennej środowiskowej MYSQL_TEST_LOGIN_FILE w celu utworzenia nowego pliku konfiguracyjnego, na wypadek gdyby plik domyślny był uszkodzony. Służy również --no-defaultsdo pomijania .cnfplików. Jeśli hasło zawiera znak #, mysql login-pathnie działa.

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test
Giovanni
źródło
Ta zmienna środowiskowa nie została ustawiona. Ustawiłem, ale mam dokładnie takie samo zachowanie. Zignorował hasło w mylogin.cnf.
Lefteris Koutsoloukas
Czy jesteś pewien, że użytkownik wykonujący mysqlpolecenie to mysql? Jeśli nie, zmień właściciela mylogin.cnfi powinno
działać
0

Mam podobny problem jak oryginalny plakat. Podejrzewam, że ma to związek ze znakami w haśle, które nie są odpowiednio szyfrowane / odszyfrowywane.

Aby potwierdzić, spróbuj zmienić hasło na coś prostego i sprawdź, czy problem nie zniknie.

Plazgoth
źródło
Miałem ten sam problem. Jak zauważył Plazgoth , hasło zawierało znak specjalny i nie działało. To, co zadziałało, to sugestia użytkownika bglad na ten post
Vinay Mandala
0

Miałem ten problem ze skryptem powłoki. Mój skrypt zmieniał wartość $ HOME, co spowodowało, że --login-path = *** wyglądało na ignorowane. Kiedy przestałem zmieniać wartość $ HOME, to zaczęło działać.

dbCarl
źródło
0

UWAGA, jeśli próbujesz uruchomić użytkownika pathpod Linuksem root - nie możesz tego po prostu użyć sudo. Musisz zalogować się jako root IE

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

Również, jak wspomniano w innych postach tutaj .. Należy użyć cudzysłowów wokół Twojego mysqlhasła, jeśli zawiera coś innego niż znaków alfanumerycznych.

Zak
źródło