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

337

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

Я подключен к экземпляру 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)

  • 0
    Я думаю, что вы войдете в систему как 'bill' @ 'localhost', что, вероятно, не то, что вы хотите.
  • 24
    Вы FLUSH PRIVILEGES ?
Показать ещё 11 комментариев
Теги:
access-denied

32 ответа

397
Лучший ответ

Вероятно, у вас есть анонимный пользователь ''@'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, мне был предоставлен доступ как анонимный пользователь. Это из-за описанных выше "правил сортировки". Обратите внимание, что в большинстве установок по умолчанию нет пароля, анонимный пользователь существует (и должен быть защищен/удален).

  • 9
    Для всех, кто интересуется, почему «bill» @ «localhost» совпадает с «@» localhost », как это было у меня, пустая строка эффективно действует как подстановочный знак в алгоритме аутентификации MySQL.
  • 0
    Краткий запрос RENAME USER ''@'localhost' TO ''@'%'; сделал мой день! Спасибо!
Показать ещё 14 комментариев
115

Try:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
  • 2
    с гран вариант :-)
  • 8
    Это довольно опасно, если кто-то взломает вашу учетную запись bill @ localhost mysql, у него будет неограниченный доступ ко всем базам данных вашего сервера mysql.
Показать ещё 4 комментария
63

Когда вы запустили

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, когда это необходимо.

  • 1
    'bill'@'localhost' должен совпадать с 'bill@%' , не так ли?
  • 0
    @Yak порядок сортировки не основан исключительно на пользовательском столбце mysql.user. MySQL не выполняет никаких сопоставлений символов как таковых. Я написал о протоколе порядка аутентификации пользователей в DBA StackExchange: dba.stackexchange.com/a/10897/877
Показать ещё 5 комментариев
14

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

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

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

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

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! Вы можете подключить свою базу данных с вашим именем пользователя и новым паролем:

[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
  • 1
    Это помогло мне, но на Mac, если вы устанавливаете с homebrew, это mysql.server stop . В моем случае я не смог обновить столбец пользователя, потому что его нет; также не может создать его, потому что он находится в безопасном режиме. Для того, что я делаю сейчас, мне все равно, но я действительно ценю этот формат ответа с точными показанными входами и выходами. Спасибо!
  • 0
    Извините, я никогда не пользовался Mac раньше. Так что я не могу вам помочь.
14

При вводе 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-адрес у вас не был.

  • 0
    msgstr "'bill' @ '%' соответствует только соединениям TCP / IP" Это неправильно. Попробуйте это на чистом (девственном, готовом) экземпляре с skip-networking
  • 0
    @ ЯК Я не могу заставить 'пользователя' @ '%' функционировать в такой обстановке, что ты имеешь в виду, должно было произойти?
Показать ещё 2 комментария
13

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

mysql -u mike -p mypass

Пробел. По-видимому, разрешен между -u # uname #, но NOT между -p и #password #

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

mysql -u mike -pmypass

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

  • 1
    или: mysql -u usrname -p - никто не увидит пароль, так как он уронит новую строку и попросит пароль, не отображая его
  • 0
    отличный ответ @mstram
Показать ещё 1 комментарий
12

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

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


mysql -u root -p

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


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

  • 0
    FFS !!!!! Это спасло меня.
12

Сохраните головную боль MAJOR... Возможно, проблема заключается в том, что вам не хватает котировок вокруг пароля. По крайней мере, это был мой случай, который оттащил меня на 3 часа.

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

Найдите "Вот типичный файл пользовательских параметров:" и посмотрите пример, который они там укажут. Удачи, и я надеюсь немного сэкономить время.

12

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

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

5

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

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

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';
3

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

$ 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>
  • 3
    Это действительно может быть проблемой (как это было для меня). Все мои пароли для любой из моих учетных записей генерируются с использованием pwgen . Сегодня я создал новый для базы данных MySQL и ее пользователя. К сожалению, пароль содержал обратную косую черту "\", которую я не определил как источник ошибок (я даже не думал об этом). Итак, я часами искал решение. После установки пароля на «123» в отчаянии логин наконец заработал. … Пользователи должны знать, что некоторые специальные символы могут вызывать проблемы, поскольку MySQL не показывает никаких предупреждений об использовании паролей, таких как, например, «daiy4ha4in7chooshuiphie \ Th * aew».
  • 1
    Собирался опубликовать это как ответ, если он еще не появился, он был слишком далеко внизу списка, чтобы я мог его заметить (поэтому я поднял его +1)
3

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

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;
  • 0
    Оператор предоставления вернул ошибку. Мне нужно было указать базу данных примерно так: предоставить все привилегии для newdb. * To ....
3

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

bind-address = 127.0.0.1
  • 1
    Для более подробной информации, вы также можете просмотреть это wiki.bitnami.org/Components/MySQL
  • 1
    Я совершенно уверен, что это не проблема. В этом случае MySQL отклоняет соединения с любого хоста, кроме 127.0.0.1, и вы не получите ошибку SQL «Отказано в доступе».
2

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

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

sudo mysql -u root -p

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

2

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

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

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

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

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

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

Решение:

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

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

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

Решение:

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

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

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

Решения:

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

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

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

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

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

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

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

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

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

2

Для меня эта проблема была вызвана новой функцией 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' @'%' имеет пустое значение плагина. Пользователь будет проигнорирован, и никто больше не сможет входить в систему с этим пользователем.

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

2

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

2

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

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

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

SQL SECURITY DEFINER

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

SQL SECURITY INVOKER

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

  • 1
    Это также стало источником моей проблемы - точка зрения с отсутствующим «определителем». Один из быстрых способов выяснить, происходит ли это с вами, состоит в том, чтобы попытаться запросить ту же таблицу или представление в качестве пользователя root - если вы это сделаете, сообщение об ошибке изменится на гораздо более описательный "ОШИБКА 1449 (HY000): пользователь указан как определитель не существует ".
2

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

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

mysql -u debian-sys-maint -p

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

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

0

ОС: окна

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

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

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

0

Я столкнулся с той же ошибкой. Установка, которая не работала, выглядит следующим образом:

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.

0

В окне "Как разрешить 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
  • 0
    Перепробовал все остальные ответы, наконец решил попробовать это и все заработало!
  • 0
    Не забудьте принять ответ и ответить
0

Это сработало для меня:

UPDATE mysql.user SET user='xxxx', password=PASSWORD('xxxx') WHERE user='';
FLUSH PRIVILEGES;

Как @RandomSeed сказал, что у вас должен быть анонимный пользователь в вашей СУБД. Дайте им имя. он будет работать

0

Для пользователей Mac, если у них все еще есть проблема (как и в моем случае), я нашел, что это решение сработало для меня: команда командной строки MySQL -bash не найдена '

Чтобы использовать команду ie mysql на терминале macbook, вам необходимо экспортировать путь, используя:

export PATH=$PATH:/usr/local/mysql/bin/

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

mysql -u root

В противном случае вы используете неправильный пароль root.

Ссылка: установка пароля пользователя root root на OSX

0

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

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

0

Также проблема может возникнуть, если вы используете старую версию MySQL UI (например, SQLYoug), которая генерирует пароли с неправильным хешем.

Создание пользователя с помощью SQL script устранит проблему.

0

Я решил это, удалив старые записи багги пользователя (это важная часть: как из 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;

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

0

Убедитесь, что нет других экземпляров SQL, которые используют сообщение localhost. В нашем случае на локальном хосте запускался другой экземпляр, который противоречил логину. Отключение этой проблемы решило эту проблему.

-1

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

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

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

-1

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

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

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

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

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

-1

Когда вы запустите 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 ведет себя нормально, "%" предоставит вам логин.

-2

Имена учетных записей 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню