Текущая среда:
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)
Пользователь команды смены пароля:
mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
Я что-то пропустил?
решение1
В MySQL 5.7 password
поле в mysql.user
таблице field было удалено, теперь имя поля — authentication_string
.
Сначала выберите базу данных:
mysql> use mysql;
А затем покажите таблицы:
mysql> show tables;
Вы найдете user
таблицу и увидите ее поля:
mysql> describe user;
Вы увидите, что нет поля с именем password
, поле пароля называется authentication_string
. Так что просто сделайте это:
update user set authentication_string=password('XXXX') where user='root';
Как предложил @Rui F Ribeiro, в качестве альтернативы вы можете запустить:
mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
решение2
Способ смены пароля в MySQL:SET PASSWORD
SET PASSWORD FOR 'root' = PASSWORD('new_password');
видетьСправочное руководство MySQL 5.7 / ... / Синтаксис SET PASSWORD
Оператор SET PASSWORD назначает пароль учетной записи пользователя MySQL, указанный либо в виде открытого текста (незашифрованного), либо в виде зашифрованного значения:
'auth_string' represents a cleartext password. 'hash_string' represents an encrypted password.
Принятый ответ от Рахула показывает, как обновить пароль с помощью DML
заявления.
update user set authentication_string=password('XXXX') where user='root';
Предупреждение: это не официальный и не поддерживаемый способ. Это может вызвать проблемы, если вы не знаете, что делаете. Не забывайте FLUSH PRIVILEGES
.
Для большинства операций, таких как создание пользователя, изменение его привилегий или изменение его пароля, вам следует использовать высокоуровневые операторы. Они не только проще в использовании и совместимы с большим количеством версий MySQL, но и предотвращают ошибки (конечно, не забудьте настроить режим SQL «NO_AUTO_CREATE_USER»). Они даже обычно хорошо работают в среде, враждебной MyISAM, например, в кластере Galera.
Прекратите использовать FLUSH PRIVILEGES
Пожалуйста, используйте GRANT
, REVOKE
, SET PASSWORD
, или RENAME USER
, а не прямые операторы DML.
Обновление: синтаксис SET PASSWORD ... = PASSWORD('auth_string') следующийустарело с версии MySQL 5.7.6и будет удален в будущей версии MySQL.
решение3
mysqladmin -u user-name password -p "oldpassword" "newpass"
если вы можете войти, попробуйте это, ""
не работает, попробуйте ''
одинарную кавычку
update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';
решение4
Для этой проблемы я использовал простой и грубый метод, переименовав имя поля в пароль, причина этого в том, что я использую программное обеспечение Mac Navicat Premium в визуальной ошибке операции: Неизвестный столбец «пароль» в «списке полей», само программное обеспечение использует пароль, так что я не могу легко работать. Поэтому я вхожу в командную строку базы данных, запускаю
Use mysql;
А затем измените имя поля:
ALTER TABLE user CHANGE authentication_string password text;
В конце концов, это нормально.