Baza danych użytkownika MySQL nie ma kolumn haseł - Instalowanie MySQL na OSX


172

Próbuję zmienić hasło roota MySql.

Poniżej przedstawiam to, co zrobiłem.

  1. Zainstaluj MySql-5.7.6 ~ .dmg (Community Server) i Środowisko pracy.
  2. Wyłącz serwer w preferencjach systemu OSX.
  3. Uzyskaj dostęp do MySql za pomocą konsoli. Rozkaz byłmysqld_safe --skip-grant
  4. Wykonaj update user set password=password('1111') where user='root';i otrzymałem komunikat o błędzie -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

FYI, tak use mysql;. Więc wybrałem zapytanie w tabeli użytkowników i stwierdziłem, że kolumna hasła w rzeczywistości nie istnieje.

To bardzo dziwne. Czy to możliwe, że oryginalna tabela użytkownika nie ma kolumny hasła?

Jak mogę zmienić hasło, które nie istnieje?

Dzięki za odpowiedź: D


Teraz testuję ponownie i mogę uzyskać dostęp do MySQL bez PW :( Czy można zmienić (mam na myśli zmianę tabeli użytkownika i dodać kolumnę hasła za pomocą zapytania) tabelę użytkownika?
Juneyoung Oh

SET PASSWORD for root @ localhost = password ('new-pass') - działa dla wszystkich wersji mysql
SIDU

UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Ponieważ pole „Hasło” zostało usunięte przez mysql i zastąpione ciągiem uwierzytelniania. Uwaga: funkcja mysql PASSWORD ('hasło') opiera się na algorytmie MD5, który został złamany dawno temu przy użyciu ataku na dzień urodzenia. Dlatego używanie go daje fałszywe poczucie bezpieczeństwa, ponieważ osoba atakująca może po prostu wkleić utworzone przez siebie skróty w publicznej witrynie internetowej, takiej jak hashkiller.co.uk/md5-decrypter.aspx, i odzyskać hasło w postaci zwykłego tekstu.
Dr Deo,

Odpowiedzi:


556

W MySQL 5.7 pole hasła w tabeli mysql.user zostało usunięte, teraz nazwa pola to „authentication_string”.

Najpierw wybierz bazę danych:

mysql>use mysql;

A następnie pokaż tabele:

mysql>show tables;

Znajdziesz tabelę użytkowników, teraz zobaczmy jej pola:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

Niespodzianka! Nie ma pola o nazwie „hasło”, pole z hasłem ma nazwę „ciąg_autoryzacji”. Więc po prostu zrób to:

update user set authentication_string=password('1111') where user='root';

Teraz wszystko będzie dobrze.

W porównaniu z MySQL 5.6 zmiany są dość obszerne: Co nowego w MySQL 5.7


42
Pan uczynił mój dzień.
Bisonfan95

3
Ta metoda działa nawet z ograniczeniem --skip-grant-table podczas uruchamiania mysqld. Ponieważ jesteś anonimowym użytkownikiem, nie możesz zmieniać haseł za pomocą: ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'new-password' ALTER USER 'root' @ '*' IDENTIFIED BY 'new-password' To da jesteś anonimowym błędem uprawnień użytkownika.
Bisonfan95

co jeśli w ogóle nie ma stołów?
Sahand

1
zmiana nazwy pola hasła ... jedna decyzja, która przysporzyła tylu ludziom tylu kłopotów ...
talsibony

2
Podczas resetowania hasła roota w kroku 2), zmień także wtyczkę uwierzytelniania na mysql_native_password: use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa

26

Ten błąd występuje, jeśli nie ustawiłeś hasła podczas instalacji, w tym przypadku mysql za pomocą wtyczki unix-socket .

Ale jeśli usuniesz link do wtyczki z ustawień (tabela mysql.user) będzie inny problem. Nie rozwiązuje to problemu i stwarza kolejny problem. Aby naprawić usunięty link i ustawić hasło („PWD”), wykonaj:

1) Uruchom --skip-grant-tableszgodnie z powyższym.

Jeśli nie robi prace następnie dodać ciąg skip-grant-tablesw części [mysqld]z /etc/mysql/mysql.conf.d/mysqld.cnf. Więc zrób sudo service mysql restart.

2) Uruchom mysql -u root -p, a następnie (zmień „PWD”):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit

wtedy sudo service mysql restart. Sprawdź mysql -u root -p.

Przed restartusunięciem tego ciągu z pliku mysqld.cnf, jeśli go tam ustawisz.


Na miejscu! Potrzebna wtyczka = "mysql_native_password" i uprawnienia do czyszczenia. Nie udało się zmusić tego do działania z żadnym innym przykładem. Dziękuję bl79!
TheRealWebGuy

DostajęERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
Chance Smith

Twoja odpowiedź brzmi świetnie! to jedna odpowiedź pomogła mi podczas 6 godzinnej walki
AlexNikonov

plugin = "mysql_native_password" Zrobiłem to za mnie
Joyner

Idealnie działa dla mnie
Mayank Sharma

23

Jedną z pułapek, w które wpadłem, jest to, że nie ma teraz pola hasła , zostało ono zmienione, więc:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

Teraz powinno być:

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';


16

Użyj ALTER USERpolecenia, zamiast próbować aktualizować USERwiersz. Pamiętaj, że może istnieć więcej niż jeden użytkownik „root”, ponieważ jednostki użytkowników są kwalifikowane również przez komputer, z którego się łączą

https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

Na przykład.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 

2
Dla MySQL 5.7.9, muszę ZMIENIĆ UŻYTKOWNIKA, aby działał poprawnie. Dzięki.
shin

potrzebowaliśmy użytkownika \ g, a następnie powyższego polecenia. Korzystanie z MySql 5.7.12. ty
bobsouza

ta odpowiedź działała tylko dla mnie, na Ubuntu 16.04, mysql 5.7.19;
A1Gard

Czy zmienili symbol wieloznaczny z @ na *? Grr ... teraz mam więcej pytań niż kiedy tu przyjechałem.
pguardiario

4

U mnie działało tylko wtedy, gdy „zaczerwieniłem się” po poleceniach wymienionych tutaj. Oto pełna lista poleceń, których użyłem:

Poprzednie odpowiedzi mogą nie działać w późniejszych wersjach mysql. Spróbuj wykonać poniższe czynności, jeśli poprzednie odpowiedzi nie pomogły:

1- Kliknij ikonę wampa> mysql> konsola mysql

2- napisz następujące polecenia, jeden po drugim

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit

4

Dziękuję za pomoc. Na wszelki wypadek, jeśli ludzie nadal mają problemy, spróbuj tego.

Dla MySQL w wersji 5.6 i starszych

Czy zapomniałeś hasła „ROOT” w systemie Mac OS X i musisz je zresetować? Wykonaj te 4 proste kroki:

  1.  Zatrzymaj serwer mysqld. Zwykle można to zrobić za pomocą opcji „Preferencje systemu”> MySQL> „Zatrzymaj serwer MySQL”
  2.  Uruchom serwer w trybie awaryjnym z pominięciem uprawnień Z terminala:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  W nowym oknie terminala:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Zatrzymaj ponownie serwer mysqld i uruchom go ponownie w trybie normalnym.

Dla MySQL w wersji 5.7 i nowszych

  1.  Zatrzymaj serwer mysqld. Zwykle można to zrobić za pomocą 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Uruchom serwer w trybie awaryjnym z pominięciem uprawnień Z terminala:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  W nowym oknie terminala:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Zatrzymaj ponownie serwer mysqld i uruchom go ponownie w trybie normalnym.

Pomogło mi to podczas instalacji mysql <5.7
Ankit Agarwal

3

W przypadku tego problemu użyłem prostej i niegrzecznej metody, zmień nazwę pola na hasło, powodem tego jest to, że używam oprogramowania premium mac navicat w wizualnym błędzie operacji: Nieznana kolumna 'hasło' w 'liście pól', samo oprogramowanie używa hasła, więc nie mogę łatwo obsługiwać. Dlatego rootuję w wierszu poleceń bazy danych, uruchamiam

Use mysql;

A następnie zmodyfikuj nazwę pola:

ALTER TABLE user CHANGE authentication_string password text;

W końcu normalne.


0

Root Cause: root nie ma hasła, a instrukcja connect w Pythonie powinna to odzwierciedlać.

Aby rozwiązać błąd 1698, zmień hasło połączenia Python na „”.

uwaga: ręczna aktualizacja hasła użytkownika nie rozwiąże problemu, nadal będzie wyświetlany błąd 1698


0

pamiętaj, że hasło musi być ustawione dalej, nawet po ponownym uruchomieniu mysql, jak poniżej

SET PASSWORD = PASSWORD('root');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.