Сначала позвольте мне упомянуть, что я рассмотрел многие предложенные вопросы и не нашел никакого релевантного ответа. Вот что я делаю.
Я подключен к экземпляру Amazon EC2. Я могу войти в MySQL с помощью этой команды:
mysql -u root -p
Затем я создал новый счет пользователя с хостом%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Предоставлено все привилегии пользователю:
grant all privileges on *.* to 'bill'@'%' with grant option;
Затем я выхожу из пользователя root и пытаюсь войти с помощью счета:
mysql -u bill -p
введите правильный пароль и получили эту ошибку:
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @'localhost' (с использованием пароля: YES)
Вероятно, у вас есть анонимный пользователь ''@'localhost'
или ''@'127.0.0.1'
.
В соответствии с руководством:
Если возможно несколько совпадений, сервер должен определить, какой из их использовать. Он решает эту проблему следующим образом: (...)
- Когда клиент пытается подключиться, сервер просматривает строки [таблицы mysql.user] в отсортированном порядке.
- Сервер использует первую строку, которая соответствует имени хоста клиента и имени пользователя.
(...) Сервер использует правила сортировки, которые сначала упорядочивают строки с наиболее важными значениями хоста. Буквенные имена хостов [такие как "localhost" ] и IP-адреса являются наиболее конкретными.
Следовательно, такой анонимный пользователь будет "маскировать" любого другого пользователя, например '[any_username]'@'%'
при подключении от localhost
.
'bill'@'localhost'
соответствует 'bill'@'%'
, но будет соответствовать (например,) ''@'localhost'
перед вызовами.
Рекомендуемое решение - отказаться от этого анонимного пользователя (обычно это хорошо делать в любом случае).
Ниже редактирование в основном не имеет отношения к основному вопросу. Они предназначены только для ответа на некоторые вопросы, поднятые в других комментариях в этом потоке.
Изменить 1
Аутентификация как 'bill'@'%'
через сокет.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock Welcome to the MySQL monitor (...) mysql> SELECT user, host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | bill | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+ 4 rows in set (0.00 sec) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | bill@% | +----------------+----------------+ 1 row in set (0.02 sec) mysql> SHOW VARIABLES LIKE 'skip_networking'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | ON | +-----------------+-------+ 1 row in set (0.00 sec)
Изменить 2
Точная настройка, за исключением того, что я активировал сеть, и теперь я создаю анонимного пользователя ''@'localhost'
.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql Welcome to the MySQL monitor (...) mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass'; Query OK, 0 rows affected (0.00 sec) mysql> Bye root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ --socket=/tmp/mysql-5.5.sock ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -h127.0.0.1 --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -hlocalhost --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
Изменить 3
В той же ситуации, что и в редакторе 2, теперь предоставляющей пароль анонимного пользователя.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost Welcome to the MySQL monitor (...) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | @localhost | +----------------+----------------+ 1 row in set (0.01 sec)
Заключение 1, из edit 1: через сокет можно аутентифицироваться как 'bill'@'%'
.
Заключение 2 из 2: Независимо от того, подключается ли через TCP или через сокет, не влияет на процесс аутентификации (за исключением того, что я не могу подключиться, как никто другой, но 'something'@'localhost'
через сокет, очевидно).
Заключение 3, из edit 3: Хотя я указал -ubill
, мне был предоставлен доступ как анонимный пользователь. Это из-за описанных выше "правил сортировки". Обратите внимание, что в большинстве установок по умолчанию нет пароля, анонимный пользователь существует (и должен быть защищен/удален).
RENAME USER ''@'localhost' TO ''@'%';
сделал мой день! Спасибо!
Try:
~$ mysql -u root -p
Enter Password:
mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
Когда вы запустили
mysql -u bill -p
и получил эту ошибку
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
mysqld ожидает, что вы будете подключаться как bill@localhost
Попробуйте создать bill@localhost
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
Если вы хотите подключиться удаленно, вы должны указать либо имя DNS, общедоступный IP-адрес, либо 127.0.0.1, используя TCP/IP:
mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP
После входа в систему запустите
SELECT USER(),CURRENT_USER();
USER() сообщает, как вы пытались выполнить аутентификацию в MySQL
CURRENT_USER() сообщает, как вам было разрешено пройти аутентификацию в MySQL из таблицы mysql.user
Это даст вам лучшее представление о том, как и почему вам разрешили войти в mysql. Почему это мнение важно знать? Он связан с протоколом упорядочения аутентификации пользователя.
Вот пример: я создам анонимного пользователя на моем рабочем столе MySQL
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)
mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| x | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| | % |
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql>
ОК следите за мной как анонимным пользователем:
C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user(),current_user();
+---------------+----------------+
| user() | current_user() |
+---------------+----------------+
| rol@localhost | @% |
+---------------+----------------+
1 row in set (0.00 sec)
mysql>
Порядок аутентификации очень строгий. Он проверяет от самого особого к минимуму. Я написал об этом стиле аутентификации в DBA StackExchange.
Не забудьте явно вызвать TCP в качестве протокола для клиента mysql, когда это необходимо.
'bill'@'localhost'
должен совпадать с 'bill@%'
, не так ли?
Если вы забыли свой пароль или хотите изменить свой пароль. Вы можете выполнить следующие действия:
1: остановите свой mysql
[root @maomao ~] # служба mysqld stop
Остановка MySQL: [OK]2: используйте "-skip-grant-tables" для перезагрузки mysql
[root @mcy400 ~] # mysqld_safe --skip-grant-tables
[root @cy400 ~] # Запуск mysqld-демона с базами данных из /var/lib/mysql3: откройте новое окно и введите корень mysql -u
[root @cy400 ~] # mysql -u root
Добро пожаловать на монитор MySQL. Команды заканчиваются; или \g.4: изменение базы данных пользователя
mysql> использовать mysql
Чтение информации о таблицах для заполнения имен таблиц и столбцов. Вы можете отключить эту функцию, чтобы быстрее запустить с измененной базой данных -A5: измените свой пароль, ваш новый пароль должен быть введен в "()"
mysql> update user set password = password ('root123') где user = 'root';
Запрос ОК, 3 строки затронуты (0.00 сек)
Соответствие строк: 3 Изменено: 3 Предупреждения: 06: флеш
mysql> привилегии flush;
7: выйти
mysql> quit
до свидания8: перезапустить mysql
[root @cy400 ~] # служба mysqld restart;
Остановка MySQL: [OK]
Запуск MySQL: [OK]
Bingo! Вы можете подключить свою базу данных с вашим именем пользователя и новым паролем:
[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor. Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye
mysql.server stop
. В моем случае я не смог обновить столбец пользователя, потому что его нет; также не может создать его, потому что он находится в безопасном режиме. Для того, что я делаю сейчас, мне все равно, но я действительно ценю этот формат ответа с точными показанными входами и выходами. Спасибо!
При вводе mysql -u root -p
вы подключаетесь к серверу mysql через локальный сокет unix.
Однако предоставленный вами грант 'bill'@'%'
достаточно точно соответствует соединениям TCP/IP.
Если вы хотите предоставить доступ к локальному сокету unix, вам нужно предоставить привилегии "bill" @ "localhost", что, как ни странно, не совпадает с "bill" @ "127.0.0.1"
Вы также можете подключиться с использованием TCP/IP с клиентом командной строки mysql, чтобы соответствовать привилегиям, которые вы уже предоставили, например. запустите mysql -u root -p -h 192.168.1.123
или какой бы локальный IP-адрес у вас не был.
skip-networking
Связанная с этим проблема в моем случае пыталась подключиться, используя:
mysql -u mike -p mypass
Пробел. По-видимому, разрешен между -u # uname #, но NOT между -p и #password #
Поэтому необходимо:
mysql -u mike -pmypass
В противном случае с пробелом между -p mypass mysql принимает 'mypass' как имя db
Супер поздно к этому
Я пробовал все эти другие ответы и запускал разные версии mysql -u root -p
, но никогда не запускал
mysql -u root -p
И просто нажмите [ENTER]
для пароля.
Как только я это сделал, он сработал. Надеюсь, это поможет кому-то.
Сохраните головную боль MAJOR... Возможно, проблема заключается в том, что вам не хватает котировок вокруг пароля. По крайней мере, это был мой случай, который оттащил меня на 3 часа.
[client]
user = myusername
password = "mypassword" # <----------------------- VERY IMPORTANT (quotes)
host = localhost
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Найдите "Вот типичный файл пользовательских параметров:" и посмотрите пример, который они там укажут. Удачи, и я надеюсь немного сэкономить время.
Решение состоит в том, чтобы удалить анонимного пользователя (любого)!
Я также столкнулся с той же проблемой при настройке сервера кем-то другим. Обычно я не хочу создавать анонимного пользователя при установке MySQL, поэтому не заметил этого. Сначала я вошел в систему как пользователь root и создал пару "обычных" пользователей (например, пользователей с привилегиями только на dbs с их именем пользователя в качестве префикса), а затем вышел из системы, а затем продолжил проверку первого обычного пользователя. Я не мог войти в систему. Ни через phpMyAdmin, ни через оболочку. Оказывается, виновником является этот "Любой" пользователь.
Лучшее решение, которое я нашел для себя, - это.
мой пользователь является сонаром и всякий раз, когда я пытаюсь подключиться к моей базе данных с внешней или другой машины, я получаю ошибку как
ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)
Также, как я пытаюсь это сделать с другой машины и через работу Jenkins мой URL для доступа
alm-lt-test.xyz.com
если вы хотите подключиться удаленно, вы можете указать его различными способами следующим образом:
mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP
Чтобы получить доступ к этому URL-адресу, вам просто нужно выполнить следующий запрос.
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';
Это также происходит, когда ваш пароль содержит некоторые специальные символы, такие как @, $и т.д. Чтобы избежать этой ситуации, вы можете обернуть пароль в одинарные кавычки:
$ mysql -usomeuser -p's0mep@$$w0Rd'
Или вместо этого не используйте пароль при вводе. Оставьте поле пустым и введите его, когда терминал запросит. Это рекомендуемый способ.
$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
pwgen
. Сегодня я создал новый для базы данных MySQL и ее пользователя. К сожалению, пароль содержал обратную косую черту "\", которую я не определил как источник ошибок (я даже не думал об этом). Итак, я часами искал решение. После установки пароля на «123» в отчаянии логин наконец заработал. … Пользователи должны знать, что некоторые специальные символы могут вызывать проблемы, поскольку MySQL не показывает никаких предупреждений об использовании паролей, таких как, например, «daiy4ha4in7chooshuiphie \ Th * aew».
Это разница между:
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
и
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
Проверьте это:
mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user | host |
+---------------+----------------------------+
| bill | % | <=== created by first
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| bill | localhost | <=== created by second
+---------------+----------------------------+
Команда
mysql -u bill -p
доступ неявно к 'bill' @'localhost' и NOT для 'bill' @'%'.
Нет разрешений для 'bill' @'localhost'
вы получите сообщение об ошибке:
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
решение проблемы:
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
grant all privileges on . to 'bill'@'localhost' with grant option;
Хорошо, я не уверен, но, вероятно, это файл my.cnf внутри каталога установки mysql является виновником. Прокомментируйте эту строку, и проблема может быть решена.
bind-address = 127.0.0.1
У меня была несколько схожая проблема - при первой попытке войти в MySql, как root, мне сказали, что доступ запрещен. Оказывается, я забыл использовать sudo...
Итак, если вы не выполнили первую попытку root, попробуйте:
sudo mysql -u root -p
а затем введите свой пароль, это должно сработать.
Сводка отладки
Существует большая вероятность, что вы могли столкнуться с этой проблемой несколько раз в своей работе. Эта проблема возникала у меня в большинстве случаев из-за неправильного ввода имени пользователя или пароля. Хотя это одна из причин, есть и другие шансы, что вы можете получить эту проблему. Иногда это выглядит очень похоже, но когда вы копаете глубже, вы поймете несколько факторов, способствующих этой ошибке. Эта статья будет подробно объяснять, большинство общих причин и работать, чтобы исправить эту проблему.
Возможные причины:
Это наиболее распространенная причина этой ошибки. Если вы ошибочно ввели имя пользователя или пароль, вы обязательно получите эту ошибку.
Решение:
Решение для такого типа ошибок очень просто. Просто введите правильное имя пользователя и пароль. Эта ошибка будет решена. Если вы забыли пароль, вы можете reset указать имя пользователя/пароль. Если вы забыли пароль для учетной записи admin/root, существует много способов reset/recapture root password. Я буду публиковать еще одно сообщение о том, как reset пароль root в случае, если вы забыли пароль root.
MySQL предоставляет ограничение на основе хоста для доступа пользователей в качестве функций безопасности. В нашей производственной среде мы ограничивали запрос доступа только серверами приложений. Эта функция действительно полезна во многих сценариях производства.
Решение:
Когда вы сталкиваетесь с этим типом проблемы, сначала проверьте, разрешен ли ваш хост или нет, проверив таблицу mysql.user. Если он не определен, вы можете обновить или вставить новую запись в таблицу mysql.user. Как правило, доступ к корневому пользователю с удаленной машины отключен, и это не лучшая практика из-за проблем с безопасностью. Если у вас есть требования для доступа к вашему серверу с нескольких компьютеров, дайте доступ только этим машинам. Лучше не использовать подстановочные знаки (%) и дает универсальный доступ. Позвольте мне обновить таблицу mysql.user, теперь демоверсер может получить доступ к серверу MySQL с любого хоста.
Этот тип ошибки возникает, когда пользователь, к которому вы пытаетесь получить доступ, не существует на сервере MySQL.
Решения:
Когда вы сталкиваетесь с этим типом проблемы, просто проверьте, существует ли пользователь в таблице mysql.user или нет. Если запись не существует, пользователь не может получить доступ. Если для этого пользователя требуется требование, создайте нового пользователя с этим именем пользователя.
Важные моменты
Не рекомендуется использовать подстановочные знаки при определении пользовательского хоста, попробуйте использовать точное имя хоста.
Отключить вход root с удаленной машины.
Использовать концепцию пользователя прокси.
Есть несколько других концепций, связанных с этой темой, и вникание в детали этих тем - это очень разные области применения этой статьи. Мы рассмотрим следующие связанные темы в следующих статьях.
Я надеюсь, что этот пост поможет вам исправить код ошибки MySQL 1045 Access, запрещенный для пользователя в MySQL.
Для меня эта проблема была вызвана новой функцией MySQL 5.7.2: записи user
игнорируются, если их поле plugin
пусто.
Установите его, например. mysql_native_password
для их повторного использования:
UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;
См. примечания к выпуску для MySQL 5.7.2 в разделе "Заметки об аутентификации".
По какой-то причине (возможно, из-за того, что мои хэш-коды до 4.1 были удалены), mysql_upgrade
script не установил значение плагина по умолчанию.
Я узнал, заметив следующее предупреждение в /var/log/mysql/error.log
:
[Warning] Пользовательская запись 'foo' @'%' имеет пустое значение плагина. Пользователь будет проигнорирован, и никто больше не сможет входить в систему с этим пользователем.
Я размещаю этот ответ здесь, чтобы спасти кого-то от использования такого же смешного количества времени на этом, как и я.
Не уверен, что кто-нибудь еще найдет это полезным, но я столкнулся с той же ошибкой и обыскал всех анонимных пользователей... и их не было. Проблема заключалась в том, что для учетной записи пользователя было установлено значение "Требовать SSL", которое я нашел в PHPMyAdmin, перейдя в Учетные записи пользователей и нажав "Изменить привилегии" для пользователя. Как только я отключил этот параметр, все сработало, как ожидалось!
Просто хотел сообщить вам необычное обстоятельство, что я получил ту же ошибку. Возможно, это поможет кому-то в будущем.
Я разработал несколько базовых представлений, созданных на сайте разработки и перенесенных на сайт-изготовитель. Позже на этой неделе я сменил PHP script, и внезапно возникли ошибки, из-за которых Access был запрещен для пользователя local-web-пользователя пользователя @localhost. Объект datasource не изменился, поэтому я сосредоточился на пользователе базы данных в MySQL, беспокоясь тем временем, что кто-то взломал мой сайт. К счастью, остальная часть сайта казалась невредимой.
Позже выяснилось, что взгляды были виновниками. Наши переносы объектов выполняются с использованием другого (и удаленного: admin @ip-address) пользователя, чем пользователя локального веб-сайта. Таким образом, представления были созданы с помощью "admin" @ip-address в качестве определителя. По умолчанию для создания SECURITY установлено значение
SQL SECURITY DEFINER
Когда пользователь local-web пытается использовать представление, он натыкается на недостающие привилегии определителя для использования таблиц. После того, как безопасность была изменена на:
SQL SECURITY INVOKER
проблема была решена. Фактическая проблема была совершенно иной, чем предполагалось на основе сообщения об ошибке.
Я надеюсь, что вы не нанесли дополнительного урона, также удалив пользователя debian-sys-maint в mysql
Пусть ваш демон mysql работает обычным способом. Запустите клиент mysql, как показано ниже.
mysql -u debian-sys-maint -p
В другом терминале, cat
файл /etc/mysql/debian.cnf
. Этот файл содержит пароль; вставьте этот пароль при появлении запроса.
ОС: окна
Мое сообщение об ошибке: "MySQL ERROR 1045 (28000): доступ запрещен для пользователя" root "@" localhost "(с использованием пароля: YES)"
Моя причина не открыта cmd с administrator permission
поэтому мое решение: открыть cmd с administrator permission
, затем он работает.
Я столкнулся с той же ошибкой. Установка, которая не работала, выглядит следующим образом:
define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);
Ниже приведена отредактированная настройка, которая заставила ее работать. Обратите внимание на разницу?
define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);
Разница заключается в двойных кавычках. Они кажутся довольно значительными в PHP, в отличие от Java, и они оказывают влияние, когда речь идет об экранировании символов, настройке URL-адресов и передаче параметров в функцию. Они красивее (я знаю), но всегда используют одинарные кавычки как можно больше, тогда двойные кавычки могут быть вложены в них, если это необходимо.
Эта ошибка возникла, когда я протестировал свое приложение на ящике Linux, а не в среде Windows.
В окне "Как разрешить ERROR 1045 (28000): доступ запрещен для пользователя" root "@" localhost "(с использованием пароля: НЕТ)
1) Uninstall mysql from control panel
2)Delete MySql folder from C:\Program Files,C:\Program Files (x86) and C:\ProgramData
3)Install mysql
Это сработало для меня:
UPDATE mysql.user SET user='xxxx', password=PASSWORD('xxxx') WHERE user='';
FLUSH PRIVILEGES;
Как @RandomSeed сказал, что у вас должен быть анонимный пользователь в вашей СУБД. Дайте им имя. он будет работать
Для пользователей Mac, если у них все еще есть проблема (как и в моем случае), я нашел, что это решение сработало для меня: команда командной строки MySQL -bash не найдена '
Чтобы использовать команду ie mysql
на терминале macbook, вам необходимо экспортировать путь, используя:
export PATH=$PATH:/usr/local/mysql/bin/
Учитывая установку по умолчанию, используйте следующую команду, чтобы получить приглашение mysql в качестве пользователя root:
mysql -u root
В противном случае вы используете неправильный пароль root.
Ссылка: установка пароля пользователя root root на OSX
У меня была та же проблема, но в моем случае решение было решено комментарием eggyal. У меня тоже был анонимный пользователь, но его удаление не решило проблему. Команда "FLUSH PRIVILEGES" работала.
Удивительная вещь для меня в том, что я создал пользователя с MySQL Workbench, и я бы ожидал, что для выполнения всех необходимых функций для выполнения задачи.
Также проблема может возникнуть, если вы используете старую версию MySQL UI (например, SQLYoug), которая генерирует пароли с неправильным хешем.
Создание пользователя с помощью SQL script устранит проблему.
Я решил это, удалив старые записи багги пользователя (это важная часть: как из mysql.user, так и mysql.db), а затем создана тот же пользователь, что и раньше:
FLUSH PRIVILEGES;
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
FLUSH PRIVILEGES;
Работает, пользователь подключается. Теперь я удалю некоторые прелести из него:)
Убедитесь, что нет других экземпляров SQL, которые используют сообщение localhost. В нашем случае на локальном хосте запускался другой экземпляр, который противоречил логину. Отключение этой проблемы решило эту проблему.
У меня была та же проблема, что и OP, пытаясь получить доступ к контейнеру-докеру MYSQL, созданному с помощью compose, у которого был очень длинный пароль:
# docker-compose.yml snippet
services:
db:
environment:
MYSQL_ROOT_PASSWORD: some_password_more_than_32_characters
Сокращение длины пароля и перестройка с помощью compulate позволили мне получить доступ к контейнеру MYSQL с клиентом вроде Workbench.
Знак процента означает все ip, поэтому localhost лишний... Нет необходимости в второй записи с локальным хостом.
На самом деле есть, "localhost" является специальным в mysql, это означает соединение через сокет unix (или именованные каналы в окнах, на которые я верю), в отличие от сокета TCP/IP. используя%, поскольку хост не включает "localhost"
У учетных записей MySQL есть два компонента: имя пользователя и имя хоста. Имя пользователя идентифицирует пользователя, а имя хоста указывает, с каких узлов он может подключиться. Имя пользователя и имя хоста объединяются для создания учетной записи пользователя:
'<user_name>'@'<host_name>'
Вы можете указать конкретный IP-адрес или диапазон адресов для имени хоста или использовать символ процента ( "%" ), чтобы этот пользователь мог войти с любого хоста.
Обратите внимание, что учетные записи пользователей определяются как именем пользователя, так и именем узла. Например, 'root'@'%'
- это другая учетная запись пользователя, чем 'root'@'localhost'
.
Когда вы запустите mysql -u bill -p
, localhost
будет разрешен для вашего ip, так как это 127.0.0.1 и в вашем /etc/hosts
файле, по умолчанию 127.0.0.1 localhost
существует. Итак, mysql интерпретирует вас как bill@localhost
, который не предоставляется с помощью bill@'%'
. Вот почему есть 2 разных записи для пользователя root
в результате запроса select host, user from mysql.user;
.
Существует два способа решения этой проблемы.
Один из них указывает ip, который не ревертируется при помощи файла /etc/hosts
при попытке входа в систему. Например, ip сервера 10.0.0.2
. Когда вы запустите команду mysql -u bill -p -h 10.0.0.2
, вы сможете войти в систему. Если вы наберете select user();
, вы получите [email protected]
. Конечно, любое имя домена не должно быть разрешено для этого ip в вашем файле /etc/hosts
.
Во-вторых, вам необходимо предоставить доступ для этого конкретного доменного имени. Для bill@localhost
вы должны вызвать команду grant all privileges on *.* to bill@localhost identified by 'billpass';
. В этом случае вы сможете войти в систему с помощью команды mysql -u bill -p
. После входа в систему команда select user();
возвращает bill@localhost
.
Но это только для того, что вы пытаетесь войти в систему с сервером mysql на том же хосте. От удаленных хостов mysql ведет себя нормально, "%" предоставит вам логин.
Имена учетных записей MySQL состоят из имени пользователя и имени узла. Имя "localhost" в имени хоста указывает на локальный хост. Вы также можете использовать подстановочные знаки "%" и "_" в именах хостов или IP-адресах. Они имеют то же значение, что и для операций согласования шаблонов, выполняемых с оператором LIKE. Например, значение хоста "%" соответствует любому имени хоста, тогда как значение "%.mysql.com" соответствует любому хосту в домене mysql.com. '192.168.1.%' Соответствует любому хосту в сети класса 192.168.1.
Выше было только введение:
на самом деле оба пользователя 'bill'@'localhost'
и 'bill'@'%'
- это разные учетные записи MySQL, поэтому оба должны использовать свои собственные данные аутентификации, такие как пароль.
Для получения дополнительной информации см. http://dev.mysql.com/doc/refman//5.5/en/account-names.html
FLUSH PRIVILEGES
?