yes - mysql error 1045 access denied for user 'root'@'localhost'




MySQL ERROR 1045(28000): доступ запрещен для пользователя 'bill' @ 'localhost'(с использованием пароля: YES) (20)

В окне «Как разрешить 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

Прежде всего позвольте мне упомянуть, что я рассмотрел многие предложенные вопросы и не нашел никакого релевантного ответа. Вот что я делаю.

Я подключен к экземпляру 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» (с использованием пароля: ДА)


Вероятно, у вас есть анонимный пользователь ''@'localhost' или ''@'127.0.0.1' .

Согласно руководству :

Когда возможны несколько совпадений, сервер должен определить, какой из них использовать. Он решает этот вопрос следующим образом: (...)

  • Когда клиент пытается подключиться, сервер просматривает строки [таблицы mysql.user] в отсортированном порядке.
  • Сервер использует первую строку, которая соответствует имени хоста клиента и имени пользователя.

(...) Сервер использует правила сортировки, которые сначала упорядочивают строки с наиболее важными значениями Host . Буквенные имена хостов [такие как «localhost»] и IP-адреса являются наиболее конкретными.

Следовательно, такой анонимный пользователь «маскирует» любого другого пользователя, например '[any_username]'@'%' при подключении с localhost .

'bill'@'localhost' действительно соответствует 'bill'@'%' , но будет соответствовать (например) ''@'localhost' перед песнями.

Рекомендуемое решение - отказаться от этого анонимного пользователя (обычно это хорошо делать в любом случае).

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

Редактировать 1

Аутентификация в виде 'bill'@'%' через сокет.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | [email protected]%         |
    +----------------+----------------+
    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' .

    [email protected]:/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

    [email protected]:/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)
    [email protected]:/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)
    [email protected]:/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, теперь предоставляющая пароль анонимного пользователя.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Заключение 1, из edit 1: через сокет можно выполнить аутентификацию как 'bill'@'%' .

Заключение 2, из раздела 2: Независимо от того, подключается ли через TCP или через сокет, не влияет на процесс аутентификации (за исключением того, что я не могу подключиться, как никому, кроме 'something'@'localhost' через сокет).

Заключение 3, из edit 3: Хотя я указал -ubill , мне был предоставлен доступ как анонимный пользователь. Это из-за описанных выше «правил сортировки». Обратите внимание на то, что в большинстве установок по умолчанию не существует пароля, анонимный пользователь существует (и должен быть защищен / удален).


Если вы забыли свой пароль или хотите изменить свой пароль. Вы можете выполнить следующие действия:

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 / mysql

3: откройте новое окно и введите mysql -u root

[root @ cy400 ~] # mysql -u root
Добро пожаловать на монитор MySQL. Команды заканчиваются; или \ g.

4: изменение базы данных пользователя

mysql> использовать mysql
Чтение информации о таблицах для заполнения имен таблиц и столбцов. Вы можете отключить эту функцию, чтобы быстрее запустить с заменой базы данных

5: измените свой пароль, ваш новый пароль должен быть введен в "()"

mysql> update user set password = password ('root123') где user = 'root';
Запрос ОК, 3 строки затронуты (0.00 сек)
Соответствие строк: 3 Изменено: 3 Предупреждения: 0

6: флеш

mysql> привилегии flush;

7: выйти

mysql> quit
до свидания

8: перезапустить mysql

[root @ cy400 ~] # служба mysqld restart;
Остановка MySQL: [OK]
Запуск MySQL: [OK]

Bingo! Вы можете подключить свою базу данных с вашим именем пользователя и новым паролем:

[[email protected] ~]# 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 состоят из имени пользователя и имени хоста. Имя «localhost» в имени хоста указывает на локальный хост. Вы также можете использовать подстановочные знаки «%» и «_» в именах хостов или IP-адресах. Они имеют то же значение, что и для операций согласования шаблонов, выполняемых с оператором LIKE. Например, значение хоста «%» соответствует любому имени хоста, тогда как значение «% .mysql.com» соответствует любому хосту в домене mysql.com. '192.168.1.%' Соответствует любому хосту в сети класса 192.168.1.

Выше было только введение:

фактически оба 'bill'@'localhost' пользователей 'bill'@'localhost' и 'bill'@'%' - разные учетные записи MySQL, поэтому оба должны использовать свои собственные данные аутентификации, такие как пароль.

Для получения дополнительной информации см. http://dev.mysql.com/doc/refman//5.5/en/account-names.html


Когда вы запускаете mysql -u bill -p , localhost разрешается для вашего ip, так как это 127.0.0.1 и в вашем /etc/hosts , по умолчанию 127.0.0.1 localhost существует.Таким образом, mysql интерпретирует вас так, как [email protected]это не предоставляется [email protected]'%'. Вот почему 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файле.

Во-вторых, вам необходимо предоставить доступ для этого конкретного доменного имени. Для [email protected], вы должны вызвать командуgrant all privileges on *.* to [email protected] identified by 'billpass'; ,В этом случае вы сможете войти в систему с помощью команды mysql -u bill -p. После входа в систему select user();команда вернется [email protected].

Но это только для того, что вы пытаетесь войти в систему с сервером mysql на том же хосте. От удаленных хостов mysql ведет себя нормально, «%» предоставит вам логин.


Когда вы побежали

mysql -u bill -p

и получил эту ошибку

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

mysqld ожидает, что вы подключитесь как [email protected]

Попробуйте создать [email protected]

CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] 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 [email protected]'%';
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() |
+---------------+----------------+
| [email protected] | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

Порядок аутентификации очень строгий. Он проверяет от самого особого к минимуму. Я написал об этом стиле аутентификации в DBA StackExchange .

Не забудьте явно вызвать TCP в качестве протокола для клиента mysql, когда это необходимо.


Не уверен, что кто-нибудь еще найдет это полезным, но я столкнулся с той же ошибкой и обыскал всех анонимных пользователей ... и их не было. Проблема заключалась в том, что для учетной записи пользователя было установлено значение «Требовать SSL», которое я нашел в PHPMyAdmin, перейдя в Учетные записи пользователей и нажав «Изменить привилегии» для пользователя. Как только я отключил этот вариант, все сработало так, как ожидалось!


ОС: окна

Мое сообщение об ошибке: «MySQL ERROR 1045 (28000): доступ запрещен для пользователя« root »@« localhost »(с использованием пароля: YES)»

Моя причина не открыта cmd с administrator permission

поэтому мое решение: открыть cmd с administrator permission , затем он работает.


Пытаться:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to [email protected] identified by 'pass' with grant option;

Решение состоит в том, чтобы удалить анонимного (любого) пользователя!

Я также столкнулся с такой же проблемой при настройке сервера кем-то другим. Обычно я не хочу создавать анонимного пользователя при установке MySQL, поэтому не заметил этого. Сначала я вошел в систему как пользователь root и создал пару «обычных» пользователей (например, пользователей с привилегиями только на dbs с их именем пользователя в качестве префикса), а затем вышел из системы, а затем продолжил проверку первого обычного пользователя. Я не мог войти в систему. Ни через phpMyAdmin, ни через оболочку. Оказывается, виновником является этот «Любой» пользователь.


Сохраните головную боль 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 -u root -p но никогда не запускал

mysql -u root -p

И просто нажмите [ENTER] для пароля.

Как только я это сделал, это сработало. Надеюсь, это поможет кому-то.


Хорошо, я не уверен, но, вероятно, это файл my.cnf в каталоге установки mysql является виновником. Прокомментируйте эту строку, и проблема может быть решена.

bind-address = 127.0.0.1

Это разница между:

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;

Я надеюсь, что вы не нанесли дополнительного урона, также удалив пользователя debian-sys-maint в mysql

Пусть ваш демон mysql работает обычным способом. Запустите клиент mysql, как показано ниже.

mysql -u debian-sys-maint -p

В другом терминале /etc/mysql/debian.cnf файл /etc/mysql/debian.cnf . Этот файл содержит пароль; вставьте этот пароль при появлении запроса.

http://ubuntuforums.org/showthread.php?t=1836919


Я решил это, удалив старые записи багги пользователя (это важная часть: как из mysql.user, так и mysql.db ), а затем создал того же пользователя, что и раньше:

FLUSH PRIVILEGES;
CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;
FLUSH PRIVILEGES;

Работал, пользователь подключается. Теперь я удалю некоторые прелести из него :)


Сводка отладки

  • Проверьте наличие ошибки опечатки: имя пользователя или пароль.
  • Проверьте имя хоста и сравните его с именем узла таблицы mysql.user.
  • Проверить пользователя существует или нет.
  • Проверьте, содержит ли хост IP-адрес или имя хоста.

Существует большая вероятность, что вы могли столкнуться с этой проблемой несколько раз в своей работе. Эта проблема возникала у меня в большинстве случаев из-за неправильного ввода имени пользователя или пароля. Хотя это одна из причин, есть и другие шансы, что вы можете получить эту проблему. Иногда это выглядит очень похоже, но когда вы копаете глубже, вы поймете несколько факторов, способствующих этой ошибке. Эта статья будет подробно объяснять, большинство общих причин и работать, чтобы исправить эту проблему.

Возможные причины:

  • Случай 1: Ошибка Typo: имя пользователя или пароль.

Это наиболее распространенная причина этой ошибки. Если вы ошибочно ввели имя пользователя или пароль, вы обязательно получите эту ошибку.

Решение:

Решение для этого типа ошибки очень простое. Просто введите правильное имя пользователя и пароль. Эта ошибка будет решена. Если вы забыли пароль, вы можете сбросить имя пользователя / пароль. Если вы забыли пароль для учетной записи admin / root, существует много способов сбросить / вернуть пароль root. Я опубликую еще одно сообщение о том, как сбросить пароль root в случае, если вы забыли пароль root.

  • Случай 2: Доступ с неправильного хоста.

MySQL предоставляет ограничение на доступ к хосту для доступа пользователей в качестве функций безопасности. В нашей производственной среде мы ограничивали запрос доступа только серверами приложений. Эта функция действительно полезна во многих сценариях производства.

Решение:

Когда вы сталкиваетесь с этим типом проблемы, сначала проверьте, разрешен ли ваш хост или нет, проверив таблицу mysql.user. Если он не определен, вы можете обновить или вставить новую запись в таблицу mysql.user. Как правило, доступ к корневому пользователю с удаленной машины отключен, и это не лучшая практика из-за проблем с безопасностью. Если у вас есть требования для доступа к вашему серверу с нескольких компьютеров, дайте доступ только этим машинам. Лучше не использовать подстановочные знаки (%) и дает универсальный доступ. Позвольте мне обновить таблицу mysql.user, теперь демоверсер может получить доступ к серверу MySQL с любого хоста.

  • Случай 3: Пользователь не существует на сервере.

Этот тип ошибки возникает, когда пользователь, к которому вы пытаетесь получить доступ, не существует на сервере MySQL.

Решения:

Когда вы сталкиваетесь с этим типом проблемы, просто проверьте, существует ли пользователь в таблице mysql.user или нет. Если запись не существует, пользователь не может получить доступ. Если для этого пользователя требуется требование, создайте нового пользователя с этим именем пользователя.

  • Случай 4: объединение числовых и именных узлов.

Важные моменты

  • Не рекомендуется использовать подстановочные знаки при определении пользовательского хоста, попробуйте использовать точное имя хоста.

  • Отключить корневой вход с удаленной машины.

  • Используйте концепцию пользователя-прокси.

Есть несколько других концепций, связанных с этой темой, и вхождение в детали этих тем - это очень разные области применения этой статьи. Мы рассмотрим следующие связанные темы в следующих статьях.

  • Что делать, если вы забыли пароль root на сервере MySQL.
  • Проблемы с правами доступа MySQL и связанные с ними таблицы.
  • Функции безопасности MySQL с лучшими практиками.

Я надеюсь, что этот пост поможет вам исправить код ошибки MySQL 1045 Access, запрещенный для пользователя в MySQL.


Знак процента означает, что все IP-адреса настолько локальны, что лишние ... Нет необходимости во второй записи с localhost.

На самом деле, «localhost» является особенным в mysql, это означает соединение через сокет unix (или именованные каналы в окнах, на которые я верю), в отличие от сокета TCP / IP. используя%, поскольку хост не включает 'localhost'

У учетных записей MySQL есть два компонента: имя пользователя и имя хоста. Имя пользователя идентифицирует пользователя, а имя хоста указывает, с каких узлов он может подключиться. Имя пользователя и имя хоста объединяются для создания учетной записи пользователя:

'<user_name>'@'<host_name>' Вы можете указать конкретный IP-адрес или диапазон адресов для имени хоста или использовать символ процента («%»), чтобы этот пользователь мог войти с любого хоста.

Обратите внимание, что учетные записи пользователей определяются как именем пользователя, так и именем узла. Например, 'root'@'%'это другая учетная запись пользователя, чем 'root'@'localhost'.


У меня была та же проблема, что и OP, пытаясь получить доступ к контейнеру-докеру MYSQL, созданному с помощью compose, у которого был очень длинный пароль:

# docker-compose.yml snippet
services:
  db:
    environment:
      MYSQL_ROOT_PASSWORD: some_password_more_than_32_characters

Сокращение длины пароля и перестройка с помощью compulate позволили мне получить доступ к контейнеру MYSQL с клиентом вроде Workbench.


У меня была та же проблема, но в моем случае решение было решено комментарием eggyal. У меня тоже был анонимный пользователь, но его удаление не решило проблему. Команда «FLUSH PRIVILEGES» работала.

Удивительная вещь для меня в том, что я создал пользователя с MySQL Workbench, и я ожидал, что для выполнения всех необходимых функций для выполнения задачи.







access-denied