Доступ запрещен для пользователя ‘root’@’localhost’ (с использованием пароля: ДА) при правильной строке аутентификации

#mysql #homebrew #access-denied

#mysql #homebrew #доступ запрещен

Вопрос:

Я застрял на этом в течение нескольких дней. У меня есть предварительная установка mysql. Что работает для меня, чтобы попасть в mysql..

 launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

$(brew --prefix mysql)/bin/mysqld_safe --skip-grant-tables --skip-networking

mysql -u root // or just mysql
  

Итак, теперь я в деле. Я успешно изменил пароль для ‘root’@’localhost’ в соответствии с результатами этого запроса..

 mysql> select host, user, authentication_string from user;
 ----------- ------------------ ------------------------------------------------------------------------ 
| host      | user             | authentication_string                                                  |
 ----------- ------------------ ------------------------------------------------------------------------ 
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | pissword                                                               |
 ----------- ------------------ ------------------------------------------------------------------------ 
4 rows in set (0.00 sec)
  

Однако я по-прежнему не могу получить доступ к mysql после выхода из этого процесса и нормального запуска сервера..

 mysqladmin -u root shutdown

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

mysql -u root -ppissword

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  

Может быть, я могу проверить журналы или что-то, чего я не знаю. Пожалуйста, помогите.

Ответ №1:

Я думаю, что проблема в том, как вы изменили пароль. Правильный синтаксис для этого

 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
  

Не забудьте сбросить привилегии после этого:

 FLUSH PRIVILEGES;
  

Дело в том, что в authentication_string столбце у вас будет хэш пароля, а не исходный пароль. Это то, что делает PASSWORD функция.

Комментарии:

1. Я использую mysql server 5.7.24, так что синтаксис должен быть правильным, согласно документам , но я получаю синтаксическую ошибку. 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 'PASSWORD('MyNewPass')' Я также сбросил привилегии. Какая разница, как я изменил пароль?

2. В вашем сообщении вы показываете результат запроса. В столбце authentication_string значением в корневой строке является ‘pissword’. Похоже, вы изменили значение непосредственно в столбце. Функция PASSWORD создала хэш пароля, и это значение должно быть внутри таблицы user. Пароль никогда не записывается в виде обычного текста.

3. Я не смог выполнить это или любое подобное утверждение без получения синтаксической ошибки. С моей стороны это может быть проблемой с установленными различными версиями mysql и переменными path и т.д. Я удалил mysql настолько полностью, насколько мог, и переустановил mysql. Теперь я могу получить доступ к root без пароля, поскольку по умолчанию none не установлен. Спасибо