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?


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');

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.


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';


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.


-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.

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.