2009-09-11 2 views
56

С помощью этой командыНе может войти с созданным пользователем в MySQL

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password'; 

Я пытаюсь войти в системе с:

mysql -u brian -ppassword 

Ошибкой является:

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

Я делаю это как root, и я попытался сбросить привилегии.

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

Также проверьте, был ли пользователь в mysql.user, который он есть.

Показать гранты Брайану показывает:

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' | 
+0

Хм ... что делает SHOW GRANTS FOR 'brian' @'% '; вернуть? – Powerlord

ответ

155

Вы, вероятно, это бессрочный проблему MySQL, где один из пользователей по умолчанию в таблице пользователей является '' @ localhost, что ветры отрицая все localhost пользователей позже в таблице. Что бы я сделал, это mysqldump база данных mysql и найдите эту запись в таблице User; если он найден, удалите его и сбросьте привилегии.

Для получения более подробной информации см. https://dev.mysql.com/doc/refman/5.5/en/connection-access.html.

Это распространенное заблуждение думать, что для данного имени пользователя все строки, явно указывающие этот пользователь, используются сначала, когда сервер пытается найти соответствие для соединения. Это неправда. Предыдущий пример иллюстрирует это, когда соединение из h1.example.net от jeffrey сначала сопоставляется не с строкой, содержащей «jeffrey» в качестве значения столбца пользователя, а по строке без имени пользователя. В результате, jeffrey аутентифицируется как анонимный пользователь, хотя при подключении он указал имя пользователя.

+1

У меня есть это на самом деле. есть лучший способ, не влияя на мое производство. –

+0

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

+0

Дополнительная информация об этом. Я почти уверен, что это моя проблема. но я не могу найти больше информации об этом. –

2

Вы забыли цитаты вокруг брайана в своем заявлении о предоставлении гранта. Попробуйте так:

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

+0

Я вижу, что вы сейчас обновили вопрос, чтобы добавить цитаты. – Asaph

3

для MySQL документы должны это сказать: (от http://dev.mysql.com/doc/refman/5.1/en/adding-users.html):

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

Необходимо, чтобы у обеих учетных записей на monty было возможно установить соединение из любого места как monty. Без учетной записи localhost учетная запись анонимного пользователя для localhost, созданная mysql_install_db, будет иметь приоритет, если monty подключается к локальному хосту . В результате monty будет рассматриваться как анонимный пользователь.Причиной этого является то, что учетная запись анонимного пользователя имеет более конкретное значение столбца Host, чем учетная запись 'monty'@'%', и, таким образом, она предшествует порядку сортировки таблиц пользователей.

С учетом этого я бы рекомендовал вам создать пользователя 'brian'@'localhost' с теми же привилегиями.

+0

работал для меня. Простое решение – Jake

+0

Какое красивое дизайнерское решение! jweyrich

17
mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 
+0

Это сделало трюк для меня. – Jared

+0

Большое спасибо, крутой ответ! – Paul

+0

Это сработало и для меня, но вы можете объяснить логику? – blackirishman

1

Я думаю, что 'Рассел Сильва' прав ...

Я создал пользователя с

CREATE USER 'username'@'%' PASSWORD='userpassword'; 

Но я не могу войти в эту account.The консоли сказал мне, что

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

Таким образом, я создал пользователя с тем же именем пользователя, за исключением того, что менял '%' на 'localhost', и я мог, наконец, войти в систему как «имя пользователя». Это довольно странно для меня.

35

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

shell> mysql_secure_installation 

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

+0

Если вы считаете, что это действительно правильный ответ, по крайней мере, для чего-то другого, кроме полных демо-баз данных. В некотором смысле кажется, что mysql является разумным, предотвращая вход в систему пользователя перед этим (и удаляя анонимных пользователей), так как это большой красный флаг, что установка небезопасна. – Phil

+0

Пять секунд решение проблемы ворчания. Благодаря! – JasonRDalton

+0

Отличный ответ! Это здорово, потому что это больше, чем просто решение вопроса OP - это делает вашу установку более безопасной. :-) – KyleFarris

0

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

mysql -u brian -ppassword -h 'other_host_than_localhost' 
7

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

+0

Мне не нужно было удалять специальные символы, которые просто должны были использовать параметр -p, чтобы запросить у меня пароль. – ccjjmartin

+0

Thanks; Хотелось бы, чтобы я увидел этот ответ, прежде чем я потратил первый час на то, чтобы решить проблему. –

+0

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

-1

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

  1. Удаление тестовой базы данных
  2. Удаление анонимного пользователя
+0

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

1

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

Это может быть отчасти очевидным для опытных пользователей, но мой пароль был случайным образом сгенерирован и содержал «\». Попал мне немного, пока я не узнал, что этот персонаж вызывает проблемы, в результате чего я не могу войти.

+1

Это не дает ответа на вопрос. Как только у вас будет достаточно [репутации] (http: // stackoverflow.com/help/whats-Reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (http://meta.stackexchange.com/questions/214173/why-do-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/15649940) – junkfoodjunkie

+0

@junkfoodjunkie Почему это не дает верного ответа, если у меня была такая же проблема, как и в вопросе, и это разрешило это для меня? – ception

0

У меня была аналогичная проблема с попыткой подключиться к базе данных Maria, работающей на Ubuntu после обновления до 17.04.

По умолчанию было прослушивание только на localhost, 127.0.0.1.

Чтобы заставить MySQL/Maria прослушивать все доступные порты и интерфейсы, мне нужно было явно указать bind-address = 0.0.0.0. Я добавил эту строку в конец файла /etc/mysql/my.cnf, т. Е.

... 
[client-server] 

# Import all .cnf files from configuration directory 

!includedir /etc/mysql/conf.d/ 
!includedir /etc/mysql/mariadb.conf.d/ 
bind-address=0.0.0.0 

Тогда ...

sudo /etc/init.d/mysql restart 
1

В моем случае это было из-за меня, нажав кнопку "SSL: Требовать SSL" (в PHPMyAdmin). Когда я изменил его на «REQUIRE NONE», я смог войти.

+0

Это исправлено для меня с phpmyadmin 4.5.4.1deb2ubuntu2. Ура! Никогда не было этой проблемы с предыдущими версиями phpmyadmin, которые я знаю. – 10us

Смежные вопросы