Не вдається увійти зі створеним користувачем у mysql


77

Використовуючи цю команду

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

Хм ... що означає SHOW GRANT FOR brian@ %; повернутися?
Powerlord,

Відповіді:


187

Напевно, у вас є ця вічна проблема MySQL, де є один із користувачів за замовчуванням у таблиці користувачів '' @ localhost, що localhostзгодом відмовляє всім користувачам у таблиці. Що я хотів би зробити це бази даних і зовнішній вигляд цього запису в таблиці; якщо знайдено, видаліть його та очистіть привілеї.mysqldumpmysqlUser

Детальніше див. Https://dev.mysql.com/doc/refman/5.5/en/connection-access.html .

Поширеною помилкою є думка, що для даного імені користувача всі рядки, що явно називають цього користувача, використовуються першими, коли сервер намагається знайти відповідність для з'єднання. Це не правда. Попередній приклад ілюструє це, коли з'єднання з h1.example.net користувачем jeffrey спочатку співпадає не за рядком, що містить "jeffrey" як значенням стовпця User, а за рядком без імені користувача. Як результат, Джеффрі аутентифікується як анонімний користувач, навіть незважаючи на те, що він вказав ім’я користувача при підключенні.


1
У мене це є насправді. чи є кращий спосіб, не впливаючи на моє виробництво.
Brian G

Що ж, ви могли б перенести ваші нещодавно створені записи перед цим, якщо ви не хочете від цього позбутися, я думаю. Але поки він є, він буде продовжувати робити це для нових користувачів. Якщо ви стурбовані позбавленням від цього, вам, мабуть, слід розібратися в документах MySQL, чому це саме там, що, я впевнений, є якась дивна причина, але я зараз не можу згадати.
хаос

Більше інформації про це. Я майже впевнений, що це моє питання. але я не можу знайти більше інформації про це.
Brian G

dev.mysql.com/doc/refman/5.1/en/default-privileges.html має щось про "анонімні облікові записи", якими, мабуть, мають бути ці облікові записи з порожнім іменем користувача. Здається, ніщо там не вказує на те, що є якийсь мінус у їх видаленні.
хаос

4
Якщо ви використовуєте mysql в системі Debian, наприклад, НАЙКРАЩИЙ спосіб вирішити цю проблему - це виконати mysql_secure_installation (потрібні кореневі привілеї).
BigBlast

46

Це проблема, спричинена анонімними користувачами. Після встановлення MySQL я завжди запускаю

shell> mysql_secure_installation 

і виберіть, щоб встановити / змінити пароль root, видалити анонімних користувачів, заборонити віддалений вхід до root, видалити тестову базу даних. Це видалить анонімного користувача та захистить вашу установку. Це також повинно вирішити вашу проблему.


Якщо ви вважаєте, що це справді правильна відповідь, принаймні для будь-чого іншого, крім повних демонстраційних баз даних. Певним чином здається, що mysql є розумним, запобігаючи входу користувачів перед цим (і видаляючи анонімних користувачів), оскільки це великий червоний прапорець, що установка небезпечна.
Філ

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

1
Це спрацювало і у мене, але чи можете ви пояснити логіку?
blackirishman

2
Зміни привілею @blackirishman не набувають чинності, доки ви не очистите старі дозволи та не встановите нові. Я впевнений, що це буде зроблено автоматично на phpmyadmin. Це спрацювало і у мене! Дякую.
logicbloke

19

Жодне із запропонованих тут рішень не спрацювало. Після безлічі помилок і спроб я зрозумів, що в паролі є спеціальні символи. Зміна пароля без спеціальних символів вирішила проблему


Мені не потрібно було видаляти спеціальні символи, я просто повинен був використовувати опцію -p, щоб запропонувати мені пароль.
ccjjmartin

1
Це було для мене. Я думаю, що проблема полягала в тому, що коли я встановив пароль, символ '\' в ньому не трактувався буквально, але коли я намагався увійти в систему з новим користувачем, це було так.
jfla

Будь-який / усі / деякі з наступних персонажів були винуватцем &? ^ \
AnkitK

2
Я розібрався з пробілами і слід уникати таких символів "'$, [] *? {} ~ #% \ <> | ^;
Мехді Неллен,

У мене були віки, щоб усвідомити це. Я використав онлайн-генератор випадкових паролів, щоб придумати пароль, який містив один із цих спеціальних символів.
BadHorsie

5

Документи 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'користувача з однаковими привілеями.


1
<sarcasm> Яке гарне дизайнерське рішення! </sarcasm>
jweyrich

2

Ви забули цитати навколо Брайана у своєму звіті про грант. Спробуйте так:

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


2

Я думаю, що Рассел Сільва має рацію ...

Я створив користувача користувачем

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

Але я не можу ввійти в цей акаунт. Консоль сказала мені це

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

Тому я створив користувача з тим самим іменем користувача, за винятком того, що змінив '%' на 'localhost', і нарешті я міг увійти як 'ім'я користувача'. Це для мене досить дивно.


1

У моєму випадку це було пов’язано з тим, що я натиснув «SSL: ПОТРЕБУВАТИ SSL» (у phpmyadmin). Коли я змінив його на "НЕ ВИМОГАТИ", я міг увійти в систему.


Це виправило це для мене за допомогою phpmyadmin 4.5.4.1deb2ubuntu2. На здоров’я! Ніколи не було цієї проблеми з попередніми версіями phpmyadmin, які я знаю.
10us

1

Змініть власний пароль за допомогою цієї команди:

ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';

0

Ви також можете підключитися з іншого хосту, і тоді анонімного користувача localhost буде обійдено, і ви можете видалити його та очистити привілеї:

mysql -u brian -ppassword -h 'other_host_than_localhost'

0

У мене була подібна проблема при спробі підключитися до Maria DB, що працює на 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

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

  1. Видалення тестової бази даних
  2. Видалення анонімного користувача

Dropping test databaseви могли б випалити весь ПК, я маю відчуття, що це також вирішило б проблему ...
Себас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.