Właśnie zainstalowałem Ubuntu 16.04 LTS wraz z pakietami php
, mariadb
a nginx
. Uruchomiłem mysql_secure_installation
i zmieniłem hasło roota.
Teraz, gdy próbuję zalogować się mysql
przy użyciu konta root podczas logowania do Ubuntu jako zwykłego konta użytkownika, dostaję odmowę dostępu.
Kiedy się sudo mysql
loguję, mysql nawet nie pyta mnie o hasło. Po uruchomieniu mysql_secure_installtion
widzę, że stare ustawienia nigdy nie zostały ustawione na stałe.
Co ja robię źle?
źródło
%
znaczy, że możesz połączyć się z dowolnego miejsca ... zdalnie?grant all privileges on *.* to 'root'@'localhost' with grant option;
Zaczerpnięte ze zmiany hasła użytkownika w MySQL 5.7 Z „plugin: auth_socket”
Aby więc zmienić z
plugin
powrotem namysql_native_password
:Zaloguj się przez sudo:
Zmień
plugin
i ustaw hasło za pomocą jednego polecenia:Oczywiście możesz również użyć powyższego polecenia, aby ustawić puste hasło.
Dla przypomnienia (i
MariaDB < 10.2
użytkowników) istnieje również inny sposób zmiany tylkoplugin
bez podania hasła (pozostawiając puste):źródło
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
Źródło: stackoverflow.com/a/41537019/1004587Krótko mówiąc, na MariaDB
gdzie zastępujesz NEWPASSWORD odpowiednim hasłem i wszystko inne dosłownie.
Problem polega na tym, że kiedy MariaDB lub MySQL są instalowane / aktualizowane (szczególnie jeśli w pewnym momencie root jest ustawiony bez hasła), to w tabeli Użytkownicy hasło jest faktycznie puste (lub ignorowane), a logowanie zależy od użytkownika systemu odpowiadającego do użytkownika MySQL. Możesz to przetestować w następujący sposób, przechodząc do systemu root, a następnie wpisz:
Następnie wpisz brak hasła lub nieprawidłowe hasło. Prawdopodobnie zostaniesz wpuszczony. (Możesz nawet zalogować się z katalogu głównego systemu Unix,
# mysql
ponieważ hasło jest nieistotne, a użytkownik jest zdefiniowany).Więc co się dzieje? Cóż, jeśli zalogujesz się jako root i wykonaj następujące czynności:
zanotujesz
auth_socket
(które możesz przeczytaćunix_socket
na MariaDB). Gniazda te ignorują hasła i pozwalają odpowiedniemu użytkownikowi Unix wejść bez sprawdzania hasła. Dlatego możesz zalogować się przy użyciu konta root, ale nie przy użyciu innego użytkownika.Rozwiązaniem jest więc zaktualizowanie użytkowników, aby nie korzystali z
auth_socket/unix_socket
i poprawnie ustawili hasło.Na MariaDB (<10.2, patrz komentarze poniżej), który jest na Ubuntu w wersji 16 od 2017 roku, powinno to wystarczyć. NEWPASSWORD to twoje hasło.
mysql_native_password
piszesz dosłownie.(Możliwe, że ustawienie pustej wtyczki działałoby. YMMV. Nie próbowałem tego. To jest alternatywa.)
Inaczej:
Następnie
Dla przypomnienia, rozwiązanie polegające na usunięciu użytkownika i ponownym utworzeniu go za pomocą „%” całkowicie zablokowało mi bazę danych i może powodować inne problemy, chyba że otrzymasz
grant
poprawną instrukcję - łatwiej jest po prostu zaktualizować katalog główny, który już masz.Z mojego doświadczenia wynika, że problem występuje tylko w przypadku użytkownika root, ponieważ inni użytkownicy zostaną dodani ręcznie, a nie w ramach pierwszej instalacji / aktualizacji.
źródło
mysql_secure_installation
nie przyniosła takiego samego efektu. Gdzie przechowuje nowe hasło?UPDATE
dotyczą MariaDB <10.2 iALTER
innych wersji? A czy drugiUPDATE
jest alternatywą dla pierwszego, czy też musimy wpisać oba? Na koniec, czy „mysql_native_password” należy wpisać dosłownie, czy też powinniśmy zastąpić je naszym zamierzonym hasłem root do MySQL?mysql_native_password
jest ta opcja.Jeśli zainstalowałeś MySQL / MariaDB z podstawowego repozytorium, użytkownicy nie mogą zalogować się do MySQL jako użytkownik root MySQL z ich logowań uniksowych (nie dotyczy, jeśli mają dostęp sudo )
Zaloguj się do powłoki root MySQL:
Wykonaj poniższe zapytania:
Otwórz nową powłokę, a następnie:
Źródło
źródło
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Spróbuj utworzyć nowe konto mysql, dla mnie to zadziałało (mysql 5.7.12):
Zaloguj się jako sudo:
Utwórz nowego użytkownika i nadaj mu uprawnienia (bez hasła):
Zaloguj się jako nowy użytkownik:
źródło
Musiałem zrobić dwie rzeczy (dzięki @Todor i @Loremhipsum):
i wtedy:
Nie polecam upuszczać użytkownika
root
.źródło
Najpierw wypróbuj ten kod,
i wtedy,
następnie naciśnij
Ctrl+Z
i wpisz:,bg
aby uruchomić proces z pierwszego planu w tle, a następnie zweryfikuj swój dostęp poprzez:źródło
Jeśli po prostu uruchomisz komendę mysql dla użytkownika root, uzyskasz dostęp bez pytania o hasło, ponieważ uwierzytelnianie gniazd włączone dla root @ localhost. .
Jedynym sposobem ustawienia hasła jest przejście na uwierzytelnianie rodzime, takie jak:
źródło
Dostosowałem niektóre skrypty obsługi, które utworzyłem, do korzystania z MariaDB i napotkałem dokładnie ten problem. Łącząc tutaj wiele informacji, odpowiedź Gazzera jest naprawdę zerowa w numerze; wszystko sprowadza się do ustawienia
auth_socket
/unix_socket
.Tak więc podczas korzystania z MariaDB 5.5 (pod Ubuntu 14.04) i MariaDB 10 pod (Ubuntu 16.04), zalogowanie się do MySQL i uruchomienie tego polecenia natychmiast wszystko wyjaśniło:
Inne odpowiedzi - w tym najwyższa głosowana odpowiedź Loremhipsum na ten post - naprawdę zachęcają do złych praktyk, zalecając upuszczenie użytkownika, a następnie jego odtworzenie. Dla mnie jest to dość radykalne rozwiązanie. Najlepsze / najprostsze rozwiązanie do zniesienia
plugin
wartości, wyzerowania uprawnień i kontynuowania życia.źródło
Miałem ten sam problem i uruchomiłem następujące rozwiązanie:
źródło
root
zplugin
ustawieniem niestandardowych ustawień użytkownika . Jedyny przypadek, w którym uaktualnienie bazy danych może pomóc w takim przypadku, tomysql_upgrade
sam proces uwzględniaplugin
ustawienie, w co wątpię.