Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: TAK) po nowej instalacji w systemie Ubuntu

124

Dzisiaj zalogowałem się jako root do Ubuntu 14.04.1 LTS ll

a następnie apt-get install mariadb-server(bez sudo, ale jako root).

Z mySQL -h localhost -u root --password=<PW>mam

Odmowa dostępu dla użytkownika „root” @ „localhost” (używając hasła: TAK)

Z mySQL -u root -pI zalogowany do DB i zrobił

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Ale to nie pomogło. Masz jakiś pomysł? Nie znalazłem odpowiedzi na podobne pytania.

SQL-Neuling
źródło
Czy próbowałeś zresetować hasło roota?
Ozgur Bar

Odpowiedzi:

277

TL; DR: Aby uzyskać dostęp do nowszych wersji mysql / mariadb jako użytkownik root, po nowej instalacji musisz być w powłoce root (tj. sudo mysql -u rootLub mysql -u rootw powłoce uruchomionej przez su -lub sudo -inajpierw)


Po wykonaniu tej samej aktualizacji na Ubuntu miałem ten sam problem.

Dziwne było to

sudo /usr/bin/mysql_secure_installation

Przyjąłby moje hasło i pozwolił mi je ustawić, ale nie mogłem się zalogować rootprzez mysqlklienta

Musiałem zacząć mariadb z

sudo mysqld_safe --skip-grant-tables

aby uzyskać dostęp jako root, podczas gdy wszyscy inni użytkownicy nadal mogą uzyskać dostęp dobrze.

Patrząc na mysql.usertabelę, którą zauważyłem dla roota, pluginkolumna jest ustawiona na, unix_socketpodczas gdy wszyscy inni użytkownicy są ustawione na `` mysql_native_password ''. Szybkie spojrzenie na tę stronę: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ wyjaśnia, że ​​Unix Socket umożliwia logowanie poprzez dopasowanie uidprocesu uruchomionego klienta do procesu użytkownika w mysql.userstół. Innymi słowy, aby uzyskać dostęp do mariadb root, musisz być zalogowany jako root.

Z pewnością ponowne uruchomienie mojego demona mariadb z wymaganym uwierzytelnieniem Mogę zalogować się jako root z

sudo mysql -u root -p

lub

sudo su -
mysql -u root -p

Po zrobieniu tego pomyślałem o tym, jak uzyskać dostęp bez konieczności wykonywania sudo, co jest tylko kwestią uruchomienia tych zapytań mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(zastępując <password>żądanym hasłem root mysql). Włączono logowanie hasłem dla użytkownika root.

Alternatywnie uruchom zapytanie mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Zmieni konto root tak, aby korzystało z hasła logowania bez zmiany hasła, ale może to pozostawić instalację mysql / mariadb bez hasła roota.

Po jednym z nich musisz ponownie uruchomić mysql / mariadb:

sudo service mysql restart

I voila, miałem dostęp z mojego konta osobistego przez mysql -u root -p

NALEŻY PAMIĘTAĆ, ŻE TO ZMNIEJSZA BEZPIECZEŃSTWO Prawdopodobnie programiści MariaDB zdecydowali się na takie działanie uprawnień roota z dobrego powodu.

Myśląc o tym jestem bardzo szczęśliwy, że muszę, sudo mysql -u root -pwięc wracam do tego, ale pomyślałem, że opublikuję swoje rozwiązanie, ponieważ nie mogłem znaleźć go gdzie indziej.

DorianFM
źródło
7
"aby uzyskać dostęp do mariadb jako root, musisz być zalogowany jako root." - To zdanie powinno znajdować się na początku odpowiedzi.
Philipp Ludwig
1
dlaczego uruchamiasz GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; polecenie dwa razy przed opróżnieniem wygód?
Blairg23
4
To powinno być gdzieś bardziej widoczne, jak wielkimi czerwonymi literami podczas INSTALACJA czy coś ... Po prostu zmarnowane kilka godzin życia próbuje się z serwerem konfiguracji, że muszę jak najszybciej ....
Gall Annonim
1
przy okazji, jeśli jesteś leniwy jak ja, możesz zaoszczędzić jakieś dwie sekundy dziękisudo service mysql restart
zeisi.
1
Dzięki za wskazówkę, świetne dla programisty, ale jak przywrócić to do oryginału?
Sam
42

W czystym Ubuntu 16.04 LTS login root MariaDB dla hosta lokalnego zmieniono ze stylu hasła na styl logowania sudo ...

więc po prostu zrób

sudo mysql -u root

ponieważ chcemy zalogować się za pomocą hasła, utwórz kolejnego użytkownika „user”

w konsoli MariaDB ... (otrzymujesz w konsoli MariaDB z 'sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

następnie w zachęcie powłoki bash,

mysql-workbench

i możesz zalogować się jako „użytkownik” z „twoim hasłem” na hoście lokalnym

Curycu
źródło
12

Wypróbuj polecenie

sudo mysql_secure_installation

naciśnij enter i przypisz nowe hasło dla roota w mysql / mariadb .

Jeśli pojawi się błąd, taki jak

BŁĄD 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/var/run/mysqld/mysqld.sock'

włącz usługę za pomocą

service mysql start

teraz, jeśli ponownie wejdziesz z

mysql -u root -p

jeśli podążasz za problemem, wprowadź sudo sui mysql -u root -pzastosuj uprawnienia do roota

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

to rozwiązało mój problem w MariaDB .

Powodzenia

Izrael M17
źródło
3

Musiałem być zalogowany do Ubuntu jako root, aby uzyskać dostęp do Mariadb jako root. Może to mieć coś wspólnego z tym „Harden ...”, o które prosi Cię podczas pierwszej instalacji. Więc:

$ sudo su
[sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

i jesteś w środku.

Joe C
źródło
2

Nowe polecenie do wyczyszczenia uprawnień to:

FLUSH PRIVILEGES

Stare polecenie FLUSH ALL PRIVILEGESjuż nie działa.

Pojawi się błąd, który wygląda tak:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

Mam nadzieję że to pomoże :)

Sylvain
źródło
0

System taki jak Ubuntu woli używać wtyczki auth_socket . Będzie próbował się uwierzytelnić, porównując twoją nazwę użytkownika w DB i proces, który wysyła żądanie mysql; jest to opisane tutaj

Wtyczka gniazda sprawdza, czy nazwa użytkownika gniazda (nazwa użytkownika systemu operacyjnego) jest zgodna z nazwą użytkownika MySQL podaną przez program klienta na serwerze i zezwala na połączenie tylko wtedy, gdy nazwy są zgodne.

Zamiast tego możesz użyć mysql_native_password , które będzie wymagało uwierzytelnienia użytkownika / hasła.

Jeśli chodzi o metodę osiągnięcia tego, polecam to .

nguyen
źródło