У DB користувача користувача MySQL немає колонок паролів - Встановлення MySQL на OSX


172

Я намагаюся змінити пароль root MySql.

Що я зробив, - нижче.

  1. Встановіть MySql-5.7.6 ~ .dmg (сервер спільноти) та робочий стіл.
  2. Вимкніть сервер за налаштуваннями системи OSX.
  3. Доступ до MySql за допомогою консолі. Команда булаmysqld_safe --skip-grant
  4. Виконати update user set password=password('1111') where user='root';та отримати повідомлення про помилку -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

FYI, я use mysql;. Тому я вибрав запит на таблиці користувачів і знайшов стовпчик паролів насправді не існує.

Це дуже дивно. Чи можливо, що в оригінальній таблиці користувачів немає стовпця паролів?

Як я можу змінити пароль, якого не існує?

Дякую за вашу відповідь: D


Тепер я тестую ще раз, і я можу отримати доступ до MySQL без PW :( Чи добре змінювати таблицю користувача (я маю на увазі змінити таблицю користувачів та додати стовпчик паролів за запитом)?
Juneyoung Oh

SET PASSWORD для root @ localhost = пароль ('new-pass') - працює для будь-яких версій mysql
SIDU

UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; Тому що поле "Пароль" було видалено mysql і замінено на автентифікацію. Зауважте: функція mysql PASSWORD ('пароль') покладається на алгоритм MD5, який давно зламався за допомогою атаки дня народження. Тож використання його дає помилкове відчуття безпеки, оскільки зловмисник може просто вставити хеші, які він створює, на загальнодоступний веб-сайт, як hashkiller.co.uk/md5-decrypter.aspx, і отримати звичайний текстовий пароль.
д-р Део

Відповіді:


556

У MySQL 5.7 поле пароля з поля таблиці mysql.user було видалено, тепер назва поля - "автентифікація_string".

Спочатку виберіть базу даних:

mysql>use mysql;

А потім покажіть таблиці:

mysql>show tables;

Ви знайдете таблицю користувачів, тепер давайте подивимося її поля:

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)

Сюрприз! Немає поля з назвою «пароль», поле пароля називається «автентифікація_string». Отже, просто зробіть це:

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

Тепер все буде добре.

Порівняно з MySQL 5.6, зміни досить великі: Що нового у MySQL 5.7


42
Ви зробили мій день.
Bisonfan95

3
Цей метод працює навіть із обмеженням --skip-grant-table при запуску mysqld. Оскільки ви анонімний користувач, ви не можете змінювати паролі за допомогою: ALTER USER 'root' @ 'localhost' ІДЕНТИФІКОВАНО за допомогою 'new-password' ALTER USER 'root' @ '*' ІДЕНТИФІКОВАНО "New-password" ви помилка дозволу анонімного користувача.
Bisonfan95

що робити, якщо таблиць взагалі немає?
Саханд

1
зміна імені поля пароля ... одне рішення, яке заподіяло стільки людей стільки неприємностей ...
talsibony

2
Під час скидання пароля root на кроці 2) також змініть плагін auth на 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

Ця помилка трапляється, якщо ви не встановили пароль при встановленні, в цьому випадку mysql, використовуючи плагін unix-socket .

Але якщо видалити посилання на плагін із налаштувань (таблиця mysql.user) виникне інша проблема. Це не виправляє проблему і створює іншу проблему. Щоб виправити видалене посилання та встановити пароль ("PWD"), виконайте:

1) Бігайте з, --skip-grant-tablesяк сказано вище.

Якщо він не працює , то додайте рядок skip-grant-tablesв розділі [mysqld]про /etc/mysql/mysql.conf.d/mysqld.cnf. Тоді робіть sudo service mysql restart.

2) Виконати mysql -u root -p, потім (змінити "PWD"):

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

quit

то sudo service mysql restart. Перевірка: mysql -u root -p.

Перед тим, як restartвидалити цей рядок з файлу mysqld.cnf, якщо його встановити там.


Пляма на! Потрібен плагін = "mysql_native_password" та привілеї флеш. Не вдалося це працювати з будь-яким іншим прикладом. Дякую бл79!
TheRealWebGuy

Я отримую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"
шанс Сміт

ваша відповідь чудова! ця одна відповідь допомогла мені під час 6 годинної боротьби
AlexNikonov

plugin = "mysql_native_password" Зробив рик для мене
Joyner

Ідеально працює для мене
Mayank Sharma

23

Одне підводне каміння, в яке я потрапив, це те, що зараз немає поля пароля , воно було перейменовано так:

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

Тепер має бути:

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


16

Використовуйте ALTER USERкоманду, а не намагаючись оновити USERрядок. Пам’ятайте, що користувачів може бути більше, ніж один «root», тому що сутності користувачів кваліфікуються також машиною, з якої вони підключаються

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

Наприклад.

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

2
Для MySQL 5.7.9 я повинен ПОТРІБНО КОРИСТУВАТИ, щоб правильно працювати. Дякую.
гомілка

нам потрібно, щоб користувач \ g дотримувався вищезгаданої команди. Використання MySql 5.7.12. ty
bobsouza

ця відповідь працювала лише для мене, на Ubuntu 16.04, mysql 5.7.19;
A1Gard

Чи змінили підстановку з @ на *? Гр ... зараз у мене більше запитань, ніж коли я прийшов сюди.
pguardiario

4

Зі мною це спрацювало лише тоді, коли я "розмився" після згаданих тут команд. Ось повний список команд, які я використав:

Попередні відповіді можуть не працювати для пізніших версій mysql. Спробуйте виконати наступні дії, якщо попередні відповіді не працювали для вас:

1- Клацніть на значку wamp> mysql> mysql console

2- написати наступні команди по черзі

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

4

Дякую за твою допомогу. На всякий випадок, якщо люди все ще мають проблеми, спробуйте це.

Для MySQL версії 5.6 і нижче

Ви забули пароль Mac OS X "ROOT" і потребуєте його скинути? Виконайте ці 4 прості дії:

  1.  Зупинити сервер mysqld. Зазвичай це можна зробити за допомогою "Системних налаштувань"> MySQL> "Зупинити MySQL сервер"
  2.  Запустіть сервер у безпечному режимі з байпасом привілеїв З терміналу:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  У новому вікні терміналу:      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  Знову зупиніть сервер mysqld і перезапустіть його у звичайному режимі.

Для MySQL версії 5.7 і вище

  1.  Зупинити сервер mysqld. Як правило, це можна зробити від 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  Запустіть сервер у безпечному режимі з байпасом привілеїв З терміналу:      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  У новому вікні терміналу:            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  Знову зупиніть сервер mysqld і перезапустіть його у звичайному режимі.

Це допоможе мені встановити mysql <5.7
Ankit Agarwal

3

Для цієї проблеми я використав простий і грубий метод, перейменував ім'я поля на пароль. Причиною цього є те, що я використовую програмне забезпечення mac navicat premium у помилці візуальної операції: Невідомий стовпець "пароль" у "Списку полів", програмне забезпечення саме використовує пароль, так що я не можу легко працювати. Тому я корінь у командний рядок бази даних, запускаю

Use mysql;

А потім змініть ім’я поля:

ALTER TABLE user CHANGE authentication_string password text;

Адже нормально.


0

Причина Root: root не має пароля, і ваш оператор python connect повинен це відображати.

Щоб вирішити помилку 1698, змініть пароль підключення python на ''.

Примітка: оновлення пароля користувача вручну не вирішить проблему, ви все одно отримаєте помилку 1698


0

Пам'ятайте, що пароль потрібно встановити далі навіть після перезавантаження mysql, як показано нижче

SET PASSWORD = PASSWORD('root');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.