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

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

Я подключен к своему экземпляру Amazon EC2. Я могу войти с MySQL root с помощью этой команды:

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' (с использованием пароля: ДА)

47 ответов

Решение

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

Согласно инструкции:

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

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

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

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

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

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


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

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

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

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock Добро пожаловать на монитор MySQL (...)

    mysql> ВЫБЕРИТЕ пользователя, хост FROM mysql.user;
    +------+-----------+
    | пользователь | хозяин | + ------ + ----------- + | счет | %         |
    | корень | 127.0.0.1 |
    | корень |::1       |
    | корень | местный хост |
    +------+-----------+
    4 строки в наборе (0,00 с)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | ПОЛЬЗОВАТЕЛЬ ()         | CURRENT_USER() |
    +----------------+----------------+
    | счет @localhost | счет @%         |
    +----------------+----------------+
    1 строка в наборе (0,02 сек) mysql> ПОКАЗАТЬ ПЕРЕМЕННЫЕ НРАВИТСЯ 'skip_networking ";
    +-----------------+-------+
    | Переменное_имя | Значение |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 строка в наборе (0,00 сек) 

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

Точно такая же настройка, за исключением того, что я повторно активировал сеть, и теперь я создаю анонимного пользователя ''@'localhost',

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Добро пожаловать на монитор MySQL (...)

    mysql> CREATE USER ''@'localhost', ИДЕНТИФИЦИРОВАНЫ 'anotherpass';
    Запрос в порядке, затронуто 0 строк (0,00 с)

    mysql> Пока

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/ TMP / MySQL-5.5.sock
    ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill'@'localhost' (с использованием пароля: ДА)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill'@'localhost' (с использованием пароля: ДА)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill'@'localhost' (с использованием пароля: ДА)

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

Та же ситуация, что и в редактировании 2, теперь указывается пароль анонимного пользователя.

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    Добро пожаловать на монитор MySQL (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | ПОЛЬЗОВАТЕЛЬ () | CURRENT_USER () |
    + ---------------- + ---------------- +
    | счет @localhost | @localhost     |
    +----------------+----------------+
    1 ряд в наборе (0,01 с)

Вывод 1, из редактирования 1: можно аутентифицироваться как 'bill'@'%' через розетку.

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

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

Пытаться:

~$ 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 -hmydb@mydomain.com
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, когда это необходимо.

Супер поздно к этому

Я попробовал все эти другие ответы и запустил много разных версий mysql -u root -p но никогда не бегал


mysql -u root -p

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


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

У меня была несколько похожая проблема - при первой попытке войти в MySql от имени root, он сказал, что доступ запрещен. Оказывается, я забыл использовать sudo...

Итак, если вы не смогли выполнить root с первой попытки, попробуйте:

sudo mysql -u root -p

и затем введите свой пароль, это должно работать.

Связанная проблема в моем случае была попытка подключения с помощью:

mysql -u mike -p mypass

Пробелы, по- видимому, разрешены между -u # uname #, но НЕ между -p и # password #

Поэтому необходимо:

mysql -u mike -pmypass

В противном случае с пробелом между -p mypass mysql принимает имя mypass в качестве имени БД

Когда вы печатаете 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-адрес вашего ящика.

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

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
Чтение информации о таблице для заполнения имен таблиц и столбцов Вы можете отключить эту функцию, чтобы ускорить запуск с -A База данных изменена

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

mysql> обновить пользовательский набор password= пароль ('root123'), где user='root';
Запрос в порядке, затронуто 3 строки (0,00 сек)
Строк совпало: 3 Изменено: 3 Предупреждений: 0

6: флеш

mysql> сброс привилегий;

7: выйти

mysql> выход
до свидания

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

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

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

[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

Избавьте себя от ОСНОВНОЙ головной боли... Ваша проблема может заключаться в том, что вы пропускаете кавычки вокруг пароля. По крайней мере, это был мой случай, который отвлек меня на 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, ни через shell. Оказывается, виновником этого "любого" пользователя.

Лучшее решение, которое я нашел для себя, это.

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

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

Кроме того, поскольку я пытаюсь это с другой машины и через работу Дженкинса, мой 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';

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

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' и НЕ к '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;

Это также происходит, когда ваш пароль содержит некоторые специальные символы, такие как @,$ и т. Д. Чтобы избежать этой ситуации, вы можете заключить пароль в одинарные кавычки:

$ 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>

Для меня у root был пароль по умолчанию

я изменил пароль, используя ALTER USER 'root'@'localhost' IDENTIFIED BY 'new Password'; и это сработало

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

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

bind-address = 127.0.0.1

Обновление: на v8.0.15 (возможно, в этой версии)PASSWORD() функция не работает.

Вы должны:

  1. Сначала убедитесь, что вы остановили MySQL.
  2. Запустите сервер в безопасном режиме с обходом привилегий: sudo mysqld_safe --skip-grant-tables
  3. Авторизоваться: mysql -u root
  4. mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. mysql> FLUSH PRIVILEGES;
  6. mysql> exit;
  7. Войдите снова: mysql -u root
  8. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

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

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

mysql -u debian-sys-maint -p

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

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

Для меня эта проблема была вызвана новой функцией 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 скрипт не установил значение плагина по умолчанию.

Я обнаружил, заметив следующее предупреждение в /var/log/mysql/error.log:

[Предупреждение] Пользовательская запись 'foo'@'%' имеет пустое значение плагина. Пользователь будет проигнорирован, и никто больше не сможет войти в систему с этим пользователем.

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

Я обнаружил еще один случай, который на поверхности кажется краевым; Я могу экспортировать в файловую систему через SELECT INTO .. ​​OUTFILE как root, но не как обычный пользователь. Хотя это может быть вопросом разрешений, я посмотрел на это и не вижу ничего особенно очевидного. Все, что я могу сказать, это то, что выполнение запроса обычным пользователем, имеющим все разрешения для рассматриваемой базы данных, возвращает ошибку отказа в доступе, которая привела меня к этой теме. Когда я нашел расшифровку успешного использования SELECT INTO … OUTFILE в старом проекте, я заметил, что вошел в систему как root. Конечно, когда я вошел в систему как root, запрос выполнялся как ожидалось.

Просто хотел сообщить вам необычное обстоятельство, я получил ту же ошибку. Возможно, это поможет кому-то в будущем.

Я разработал несколько базовых представлений, создал их на сайте разработки и перенес их на производственную площадку. Позже на этой неделе я изменил PHP-скрипт, и внезапно возникли ошибки, когда доступ был запрещен для пользователя 'local-web-user'@'localhost'. Объект источника данных не изменился, поэтому я сосредоточился на пользователе базы данных в MySQL, опасаясь, пока кто-нибудь взломает мой сайт. К счастью, остальная часть сайта казалась невредимой.

Позже выяснилось, что взгляды были виновником (ами). Наши передачи объектов выполняются с использованием другого (и удаленного: admin @ ip-address) пользователя, нежели пользователь локального веб-сайта. Таким образом, представления были созданы с "admin" @ "IP-адрес" в качестве определителя. По умолчанию создание представления SECURITY

SQL SECURITY DEFINER

Когда локальный веб-пользователь пытается использовать представление, он сталкивается с отсутствующими привилегиями определителя для использования таблиц. После того, как безопасность была изменена на:

SQL SECURITY INVOKER

проблема была решена. Фактическая проблема полностью отличалась от ожидаемой на основании сообщения об ошибке.

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

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

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

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

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

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

Решение:

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

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

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

Решение:

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

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

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

Решения:

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

  • Случай 4: Сочетание хостов на основе чисел и имен.

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

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

  • Отключить root-логин с удаленной машины.

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

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

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

Я надеюсь, что этот пост поможет вам исправить MySQL Error Code 1045 Доступ запрещен для пользователя в MySQL.

Настоящее время! Решение для:

ОШИБКА MySQL 1045 (28000): доступ запрещен для пользователя user @localhost (с паролем: YES);

Wampserver 3.2.0 новая установка или обновление

Наверное xamp с помощью mariaDB по умолчанию это хорошо.

Wamp сервер идет с mariaDB и mysql, и установка mariaDB по умолчанию на порту 3306 и mysql на 3307, иногда на порту 3308.

Подключиться к mysql!

При установке просит использовать mariaDB или MySql, Но mariaDB отмечен по умолчанию, и вы не можете его изменить, отметьте mysql вариант и установить.

когда установка будет завершена, оба будут работать mariaDB по умолчанию порт 3306 и mysql на другом порту 3307 или 3308.

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

И включите его в соединение с базой данных, как показано ниже:

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port

$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Note : Я использую pdo.

Подробнее см. Здесь: https://sourceforge.net/projects/wampserver/

У меня были подобные проблемы, потому что мой пароль содержит ";" char нарушает мой пароль, когда я его создаю в первый момент. Будьте осторожны, если можете вам помочь.

      sudo -i 
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

получить доступ к службе mysql без входа в систему (можно увидеть beacue в оболочке mysql>)

Это может относиться к очень немногим людям, но здесь идет. Не используйте восклицательный знак (!) В своем пароле. Я сделал и получил вышеупомянутую ошибку, используя MariaDB. Когда я упростил это до просто цифр и букв, это сработало. Другие символы, такие как @ и $, работают нормально - я использовал эти символы у другого пользователя в том же экземпляре. Пятый ответ по этому адресу привел меня к решению проблемы.

Итак, для меня проблема была связана с портами, которые я отображаю.

3306 => 3306 не работает

3307 => 3306 работает!

Это в контексте создания туннеля ssh:

      ssh -N -L 3307:rdsDns:3306 ec2User@ec2Dns -i key.pem -v

3307 - это локальный порт, а 3306 - удаленный порт.

В окне Как решить ОШИБКУ 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

Для меня это не было указанием -p параметр при вводе mysql.

      mysql -p

У меня не было проблем, но запускать mysql без пароля было неправильно.

Если длина ваших строк dbname, username, password и т. Д. Превышает значения, указанные на https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html, вы может также не войти в систему, как это было в моем случае.

Другие вопросы по тегам