nie może się zalogować jako root użytkownika mysql ze zwykłego konta użytkownika w Ubuntu 16.04

129

Właśnie zainstalowałem Ubuntu 16.04 LTS wraz z pakietami php , mariadb i nginx . Uruchomiłem mysql_secure_installation i zmieniłem hasło roota.

Teraz, gdy próbuję zalogować się do mysql przy użyciu konta root podczas logowania do Ubuntu jako zwykłego konta użytkownika otrzymuję odmowę dostępu.

Kiedy loguję się za pomocą sudo mysql , mysql nawet nie pyta mnie o hasło. Jeśli uruchomię mysql_secure_installtion , widzę, że stare ustawienia nigdy nie zostały ustawione na stałe.

Co robię źle?

    
zadawane codescope 02.05.2016, 13:45
źródło

10 odpowiedzi

245

Niedawno uaktualniłem swoje Ubuntu 15.04 do 16.04 i działało to dla mnie:

  1. Najpierw połącz się w sudo mysql

    sudo mysql -u root
    
  2. Sprawdź swoje konta w bazie

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Usuń bieżące konto root @ localhost

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Odtworz swojego użytkownika

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Daj uprawnienia swojemu użytkownikowi (nie zapominaj o przywracaniu uprawnień)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Wyjdź z MySQL i spróbuj połączyć się ponownie bez sudo.

Mam nadzieję, że to pomoże komuś:)

    
odpowiedział Loremhipsum 08.06.2016, 11:04
źródło
87
  

Jeśli zainstalujesz 5.7 i nie podasz hasła do użytkownika root , to   użyje wtyczki auth_socket . Ta wtyczka nie obchodzi i   nie potrzebuje hasła. Sprawdza tylko, czy użytkownik łączy się   za pomocą gniazda UNIX, a następnie porównuje nazwę użytkownika.

Zaczerpnięte z Zmień hasło użytkownika w MySQL 5.7 Za pomocą "plugin: auth_socket "

Aby zmienić plugin z powrotem na mysql_native_password :

  1. Zaloguj się przy pomocy sudo:

    sudo mysql -u root
    
  2. Zmień plugin i ustaw hasło za pomocą pojedynczego polecenia:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

Oczywiście możesz również użyć powyższego polecenia, aby ustawić puste hasło.

Tylko dla zapisu (i MariaDB < 10.2 użytkowników) istnieje również inny sposób zmiany tylko plugin bez podania hasła (pozostawiając puste):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
odpowiedział Todor 23.07.2016, 09:46
źródło
8

Problem polega na tym, że gdy MariaDB lub MySQL są zainstalowane / zaktualizowane (szczególnie jeśli w pewnym momencie root jest ustawiony bez hasła), to w tabeli Użytkownicy hasło jest rzeczywiście puste (lub ignorowane), a logowanie zależy od użytkownik systemu odpowiadający użytkownikowi MySQL. Możesz przetestować to w następujący sposób, przełączając się na root systemu, a następnie wpisz:

mysql -uroot -p

Następnie wpisz hasło bez hasła lub nieprawidłowe . Najprawdopodobniej zostaniesz wpuszczony. (Możesz nawet być w stanie zalogować się z głównego systemu uniksowego po prostu # mysql , ponieważ hasło jest nieistotne, a użytkownik jest zdefiniowany).

Co się dzieje? Cóż, jeśli logujesz się jako root i wykonujesz następujące czynności:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

zauważysz auth_socket (który może odczytać unix_socket na MariaDB). Te gniazda ignorują hasła i zezwalają odpowiedniemu użytkownikowi uniksowemu w bez sprawdzenia hasła. Dlatego możesz zalogować się z root , ale nie z innym użytkownikiem.

Rozwiązaniem jest aktualizacja użytkowników, aby nie używali auth_socket/unix_socket i poprawnie ustawili hasło.

Na serwerze MariaDB (<10.2), który jest w wersji 16 systemu Ubuntu od 2017 r., powinno wystarczyć:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Możliwe, że ustawienie wtyczki na puste będzie działało.) YMMV. Nie próbowałem tego.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

W przeciwnym razie:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Następnie

FLUSH PRIVILEGES;

Dla przypomnienia rozwiązanie polegające na usunięciu użytkownika i odtworzeniu go z "%" spowodowało całkowite zablokowanie bazy danych i może spowodować inne problemy, chyba że uzyskasz poprawną instrukcję grant - łatwiej po prostu zaktualizować root już masz.

Z mojego doświadczenia wynika, że problem dotyczy tylko użytkownika root, ponieważ inni użytkownicy zostaną dodani ręcznie, a nie część początkowej instalacji / aktualizacji.

    
odpowiedział Gazzer 14.10.2017, 06:18
źródło
5

Jeśli zainstalowałeś MySQL / MariaDB z podstawowego repozytorium, użytkownicy nie mogą zalogować się do MySQL jako użytkownik root MySQL ze swoich uniksowych loginów (nie dotyczy jeśli mają sudo dostęp)

  1. Zaloguj się do powłoki głównej MySQL:

    $ sudo mysql -u root -p
    
  2. Wykonaj poniższe zapytania:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Otwórz nową powłokę, a następnie:

    $ mysql -u root -p
    

Źródło:

link

    
odpowiedział Gayan Weerakutti 02.12.2017, 09:31
źródło
2

Spróbuj utworzyć nowe konto mysql, dla mnie zadziałało (mysql 5.7.12):

  1. Zaloguj się jako sudo:

    sudo mysql -uroot
    
  2. Utwórz nowego użytkownika i nadaj mu uprawnienia (bez hasła):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Zaloguj się jako nowy użytkownik:

    mysql -uadmin
    
odpowiedział Alex Yakovlev 28.05.2016, 11:37
źródło
1

Najpierw wypróbuj ten kod,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

a następnie

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

następnie naciśnij Ctrl+Z i wpisz: bg , aby uruchomić proces z pierwszego planu w tle, a następnie sprawdź swój dostęp przez:

mysql -u root -proot
mysql> show grants;
    
odpowiedział ADHITHYA SRINIVASAN 28.05.2016, 11:47
źródło
1

Jeśli po prostu uruchomisz komendę mysql w katalogu głównym, uzyskasz dostęp bez pytania o hasło, ponieważ włączone jest uwierzytelnianie gniazda dla root @ localhost. .

Jedynym sposobem ustawienia hasła jest przełączenie na uwierzytelnianie natywne, takie jak:

  

$ sudo mysql

     

mysql > ZMIENIA UŻYTKOWNIKA 'root' @ 'localhost' IDENTYFIKOWANY Z   mysql_native_password BY 'test';

    
odpowiedział Vadiaz 26.07.2017, 17:23
źródło
1

Musiałem zrobić dwie rzeczy (dzięki @Todor i @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

, a następnie:

FLUSH PRIVILEGES;

Nie polecałbym usuwania użytkownika root .

    
odpowiedział Franc Drobnič 03.01.2018, 17:43
źródło
0

Dostosowuję niektóre skrypty obsługi administracyjnej, które utworzyłem, aby używać MariaDB, i wpadłem na ten dokładny problem. Łącząc wiele informacji tutaj, odpowiedź Gazzera naprawdę zera w tym numerze; wszystko sprowadza się do ustawienia auth_socket / unix_socket .

Tak więc przy korzystaniu z MariaDB 5.5 (pod Ubuntu 14.04) i MariaDB 10 w (Ubuntu 16.04), logowanie do MySQL i uruchomienie tej komendy od razu wyjaśniło:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Pozostałe odpowiedzi - w tym najwyższa głosowana odpowiedź od tego posta autorstwa Loremhipsum - zachęcać do złych praktyk zalecając upuszczenie użytkownika, a następnie odtwarzając je. Dla mnie to dość radykalne rozwiązanie. Najlepsze / najprostsze rozwiązanie do unieważniania wartości plugin , przywracania kolorów i korzystania z życia.

    
odpowiedział JakeGould 20.10.2017, 02:54
źródło
-1

Miałem ten sam problem i uruchomiłem następujące rozwiązanie:

mysql_upgrade --force
    
odpowiedział klob 03.05.2016, 08:48
źródło

Przeczytaj inne pytania na temat tagów