Jak zmienić hasło „root” MySQL za pomocą MySQL v7.7?

14

Obecne środowisko:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Użytkownik polecenia zmiany hasła:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Czy coś brakuje?

Shivu RH
źródło
spróbuj uruchomić mysqlw trybie awaryjnym. następnie możesz zmienić hasło roota
Mongrel
Do każdego, kto czyta ten wątek. MySQL 5.7 ma poważne zmiany pod maską. Przeczytaj o nich przed aktualizacją.
Rui F Ribeiro

Odpowiedzi:

24

W MySQL 5.7 passwordpole w polu mysql.usertabeli 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 usertabelę i zobaczysz jej pola:

mysql> describe user;

Uświadomisz sobie, że nie ma nazwanego pola password, pole hasła jest nazwane authentication_string. Więc po prostu zrób to:

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

Zgodnie z sugestią @Rui F Ribeiro, alternatywnie możesz uruchomić:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
źródło
1
+1 za odniesienie do łańcucha_uwierzytelnienia. Niedawno się o tym dowiedziałem po aktualizacji do 5.7
Rui F Ribeiro
4
Chociaż nie jest ona całkowicie skierowana na tę odpowiedź, inną alternatywą dla 5.7 jestSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro dzięki, zaktualizowałem moją odpowiedź
Rahul
1
Rahul Początkowo edytowałem ten wątek później niż w wersji 5.7, ale potem zmieniłem go na MySQL 5.7, aby lepiej trzymać się ducha pytania. np. @Shivu nie wiedział, że to zmiana w 5.7.
Rui F Ribeiro
1
Jest to sposób na sformułowanie pytania. Nie edytujemy pytań i odpowiedzi tylko dla korzyści PO, ale także dla innych później.
Rui F Ribeiro
2

Sposób zmiany hasła w MySQL to SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

patrz MySQL 5.7 Instrukcja obsługi / ... / SET PASSWORD Składnia

Instrukcja SET PASSWORD przypisuje hasło do konta użytkownika MySQL, określonego jako czysty tekst (niezaszyfrowany) lub zaszyfrowana wartość:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Zaakceptowana odpowiedź od Rahula pokazuje, jak zaktualizować hasło za pomocą DMLinstrukcji.

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

Ostrzeżenie: to nie jest oficjalny i obsługiwany sposób. Może powodować problemy, jeśli nie wiesz, co robisz. Nie zapomnij FLUSH PRIVILEGES.

W przypadku większości operacji, takich jak tworzenie użytkownika, zmiana jego uprawnień lub zmiana hasła, będziesz chciał użyć instrukcji wysokiego poziomu. Nie tylko są łatwiejsze w użyciu i są kompatybilne z większą liczbą wersji MySQL, ale także zapobiegną popełnianiu błędów (oczywiście pamiętaj, aby skonfigurować tryb sql „NO_AUTO_CREATE_USER”). Zwykle działają nawet ładnie w środowisku nieprzyjaznym dla MyISAM, takim jak klaster Galera.

Przestań używać FLUSH PRIVILEGES

Proszę używać GRANT, REVOKE, SET PASSWORD, lub RENAME USER, a nie bezpośrednie oświadczenia DML.

Aktualizacja: SET PASSWORD ... = Składnia PASSWORD ('auth_string') jest przestarzała od MySQL 5.7.6 i zostanie usunięta w przyszłej wersji MySQL.

Iwanow
źródło
1

mysqladmin -u user-name password -p "oldpassword" "newpass"

jeśli możesz się zalogować, spróbuj tego ""nie zadziała spróbuj ''pojedynczego cytatu

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

Kundel
źródło
Chociaż wolę odpowiedź mysqladmin, patrz odpowiedź Rahula. Twoje zapytanie SQL jest nieaktualne. Poprawiłem mysqladmin, brakuje Ci dyrektywy dotyczącej haseł.
Rui F Ribeiro
1
Dzięki, Ribeiro. Brakowało miauthentication_string
Mongrel
0

W moim przypadku

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Więc myślę, że twoje polecenie aktualizacji jest prawidłowe, ale musisz zrestartować serwer mysql.

Jack LI
źródło
-1

W przypadku tego problemu zastosowałem prostą i niegrzeczną metodę, zmień nazwę pola na hasło, ponieważ używam oprogramowania mac navicat premium 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 linii poleceń bazy danych, uruchamiam

Use mysql;

A następnie zmodyfikuj nazwę pola:

ALTER TABLE user CHANGE authentication_string password text;

W końcu normalne.

luyishisi
źródło