MySQL ERROR 1045 (28000): Доступ заборонено користувачеві 'bill' @ 'localhost' (з використанням пароля: ТАК)


429

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

Я підключений до мого примірника 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' (з використанням пароля: ТАК)


34
Ти що FLUSH PRIVILEGES?
eggyal

6
Гаразд, я спробував це без жодного успіху. Будь-яка інша пропозиція, будь ласка.
Алі

1
Яку версію сервера ви працюєте? Я бачив, як 5.1 поводиться дивно з цього приводу.
Пудлехат

2
Це сталося зі мною під час встановлення Magento, і я зробив набагато дурнішу помилку. Введення „mysql -u magento -p magento“ запропонувало мені ввести пароль, а замість пароля за замовчуванням я
вводив

2
@authentictech, на жаль, жодне із запропонованих рішень не працювало для мене під час опублікування цього питання. Будь ласка, подивіться мою власну відповідь, яка допомогла мені отримати цю ситуацію. Саме тому я не позначив жодного з них як відповідь. Напевно, я можу відзначити відповідь найвищого рейтингу.
Алі

Відповіді:


441

Можливо, у вас є анонімний користувач ''@'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
    Ласкаво просимо на монітор MySQL (...)

    mysql> ВИБІР користувача, хостинг від mysql.user;
    + ------ + ----------- +
    | користувач | хост |
    + ------ + ----------- +
    | вексель | % |
    | корінь | 127.0.0.1 |
    | корінь | :: 1 |
    | корінь | localhost |
    + ------ + ----------- +
    4 ряди в наборі (0,00 сек)

    mysql> SELECT USER (), CURRENT_USER ();
    + ---------------- + ---------------- +
    | USER () | CURRENT_USER () |
    + ---------------- + ---------------- +
    | рахунок @ localhost | рахунок @% |
    + ---------------- + ---------------- +
    1 ряд у наборі (0,02 сек)

    mysql> SHOW VARIABLES LIKE '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';
    Запит OK, 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 ();
    + ---------------- + ---------------- +
    | USER () | CURRENT_USER () |
    + ---------------- + ---------------- +
    | рахунок @ localhost | @localhost |
    + ---------------- + ---------------- +
    1 ряд у наборі (0,01 сек)

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

Висновок 2, з редагування 2: Підключення через TCP або через сокет не впливає на процес аутентифікації (за винятком того, що один не може підключитися як ніхто інший, але 'something'@'localhost'через сокет, очевидно).

Висновок 3, з редакції 3: Хоча я вказав -ubill, мені було надано доступ як анонімний користувач. Це пов’язано з "правилами сортування", про які йшлося вище. Зауважте, що в більшості установок за замовчуванням анонімний користувач без пароля існує (і його слід захистити / видалити).


9
Для всіх, хто цікавиться, чому 'bill' @ 'localhost' збігається '' @ 'localhost', як я, порожня рядок фактично діє підкресленням в алгоритмі аутентифікації MySQL.
Дін або

2
@Sanja Будьте особливо обережні з цим вирішенням. Можливо, ви дозволяєте анонімний доступ до вашої бази даних з будь-якого місця. У разі сумнівів я б скоріше видалив користувача.
RandomSeed

7
@RandomSeed Дякую за цей коментар! Напевно, я повинен просто видалити анонімного користувача. PS Я знайшов dev.mysql.com/doc/refman/5.1/en/default-privileges.html , що говорить , що ці користувачі , безумовно , можуть бути видалені DROP USER ''@'localhost';. Вони не потрібні для якоїсь особливої ​​мети.
Олексій

1
Я скинув анонімного користувача, але все одно не вийшло. Тоді я виявив, що мені потрібно випустити також "ПЛАТНІ ПРИВІЛЕГИ". Було б корисно згадати і про це.
Neeme Praks

2
Це відповідь! Чому це не вказується жирними великими літерами у кожному посібнику з mysql. ВІДКЛЮЧИТИ АНОНІМНОГО КОРИСТУВАЧА АБО ВІН ВІДБУВАЄ ВСІ ВАШІ СУСПІЛКИ ДО ВІДПОВІДУ З ЛОКАЛГОСТУ!
Сергій

140

Спробуйте:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;

10
Це досить небезпечно, якщо хтось зламає ваш рахунок @ localhost mysql, він матиме нескінченний доступ до всіх баз даних вашого сервера mysql.
Адоніс К. Какулідіс

2
Сироватка. Я повинен був поставити цитату навколо мого користувача "myusername'@'myhost.static.myip.com", тоді це спрацювало.
Бендечко

Це працює для мене, але я боюся, що я дав занадто багато привілеїв для користувача
Csaba Toth,

1
@CsabaToth ви зробили, зменшіть пільги знову, поки ваш користувач не отримає те, що йому потрібно, і не більше того.
jwenting

... і що ви робите, якщо це дає вам "Заборонено доступ для користувача" root "@" localhost "(з використанням пароля: ТАК)"?
Grunion Shaftoe

75

Коли ти біг

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, коли це необхідно.


1
'bill'@'localhost'має відповідати 'bill@%', чи не так?
RandomSeed

@Yak порядок сортування базується не лише на стовпці користувача mysql.user. MySQL не відповідає жодним символам. Я писав про протокол замовлення автентифікації користувачів у DBA StackExchange: dba.stackexchange.com/a/10897/877
RolandoMySQLDBA

@YaK Саме тому я спеціально згадав SELECT USER(),CURRENT_USER();. Ви майже ніколи не бачите анонімних користувачів з цих двох функцій, за винятком дійсно поганих налаштувань.
RolandoMySQLDBA

1
Я ніколи не припускав, що порядок сортування базується виключно на mysql.user. Насправді, якщо ви ще раз прочитаєте мою відповідь, ви побачите, що я сказав (власне, в посібнику) порядок сортування базується на hostпершому стовпчику. Ви багато писали про те, як перевірити свої поточні облікові дані, але я бачу мало інформації щодо того, чому 'bill'@'localhost'не можна ввійти в систему 'bill'@'%', що є сьогоднішнім питанням AFAIK. ОП, ймовірно, має погані налаштування, саме тому він отримує ці помилки.
RandomSeed

2
--protocol=TCPбуло ключовим. Дуже дякую!
lfx

22

Супер пізно до цього

Я спробував усі ці інші відповіді і запустив багато різних версій, mysql -u root -pале ніколи не просто працював


mysql -u root -p

І просто натиснути [ENTER]на пароль.


Одного разу я це зробив. Сподіваюся, що це комусь допоможе.


18

Пов’язана проблема в моєму випадку намагалася підключитися за допомогою:

mysql -u mike -p mypass

Пробіл IS, очевидно, дозволений між -u # uname #, але НЕ між -p і # паролем #

Тому потрібно:

mysql -u mike -pmypass

Інакше з пробілом між -p mypass mysql приймається "mypass" як ім'я db


1
або: mysql -u usrname -p - це не дозволяє комусь бачити пароль, оскільки він

великий відповідь @mstram
Arpit Solanki

1
це рішення зручне, проте вводити пароль очевидно, але не потрібно вводити привілеї та надавати інші речі. Тож якщо ви користуєтеся книгою mac - такий підхід дуже комфортний, ще більше я використовував його для імпорту даних у aws від драйвера docker mysql.
dimpiax

17

Під час введення 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-адреси у вашому полі.


"" bill "@"% "відповідає лише TCP / IP-з'єднанням" Це неправильно. Спробуйте це на чистому (незайманому) екземплярі зskip-networking
RandomSeed

@YaK Я не можу змусити функцію 'user' @ '%' функціонувати в таких налаштуваннях, що ви мали на увазі?
нос

Я можу підключитися як 'bill' @ '%' на v5.0 без мереж (отже, через сокет). Яку версію ви використовуєте? Я спробую це на v5.5.
RandomSeed

Будь ласка, дивіться мою оновлену відповідь. Я зміг увійти як 'bill'@'%'через сокет на v5.5.
RandomSeed

17

Якщо ви забудете свій пароль або хочете змінити свій пароль. Ви можете виконати наступні дії:

1: зупиніть свій mysql

[root @ maomao ~] # сервіс mysqld stop
Зупинка MySQL: [ОК]

2: використовуйте “--skip-grant-table” для перезапуску mysql

[root @ mcy400 ~] # mysqld_safe --skip-grant-
table [root @ cy400 ~] # Запуск демона mysqld з базами даних від / var / lib / mysql

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

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

4: змінити базу даних користувачів

mysql> використовувати mysql
Читання інформації таблиці для заповнення імен таблиці та стовпців Ви можете вимкнути цю функцію для швидшого запуску із зміною бази даних -A

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

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

6: змивання

mysql> flush privileges;

7: кинути

mysql> кинь до
побачення

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

[root @ cy400 ~] # сервіс mysqld перезапуск;
Зупинка 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

1
Це допомогло мені, але на mac, якщо ви встановлюєте з домашньою мовою, це mysql.server stop. У моєму випадку я не зміг оновити стовпчик користувача, оскільки його немає; також не вдалося створити його, оскільки він знаходиться в безпечному режимі. Мене не хвилює те, що я зараз роблю, але я дуже ціную цю відповідь формату з вказаними точними входами та виходами. Дякую!
szeitlin

Вибачте, я ніколи не використовував Mac, тому я не можу вам допомогти.
Лі Іньцзюн

15

Збережіть себе від ГОЛОВНОГО головного болю ... Ваша проблема може полягати в тому, що вам не вистачає лапок навколо пароля. Принаймні, це був мій випадок, який обійшов мене на 3 години.

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

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

Знайдіть "Ось типовий файл параметрів користувача:" та перегляньте приклад, який вони там містять Удачі, і я сподіваюся врятувати когось іншого певний час.


1
ДЯКУЮ за це. Я витрачав на це половину дня, і дурні цитати навколо пароля зробили трюк!
guyfromfl

Ха-ха. Я витратив майже те саме, коли зі мною трапився. Радий за допомогу.
міморалія

12

Рішення - видалити анонімного (Будь-якого) користувача!

Я також зіткнувся з тією ж проблемою під час налаштування сервера кимось іншим. Зазвичай я не вибираю створювати анонімного користувача після встановлення MySQL, тому цього не помічав. Спочатку я ввійшов як "root" користувач і створив пару "звичайних" користувачів (він же користувачів, які мають привілеї лише на dbs із своїм ім'ям користувача як префікс), потім вийшов із системи, а потім перейшов до перевірки першого нормального користувача. Я не зміг увійти. Ні через phpMyAdmin, ні через оболонку. Виявляється, винуватець цього користувача "Будь-який".


11

У мене була дещо схожа проблема - при моїй першій спробі ввести MySQL, як root, мені сказали, в доступі заборонено. Виявляється, я забув використовувати sudo...

Отже, якщо ви не зможете з rootпершої спроби, спробуйте:

sudo mysql -u root -p

а потім введіть свій пароль, це має працювати.


6

Найкраще рішення, яке я знайшов для себе, - це.

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

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

4

Гаразд, я не впевнений, але, мабуть, саме цей файл my.cnf в каталозі установки mysql є винуватцем. Прокоментуйте цей рядок і проблема може бути вирішена.

bind-address = 127.0.0.1

1
Щоб отримати детальнішу інформацію, ви також можете переглянути це wiki.bitnami.org/Components/MySQL
Алі

1
Я цілком впевнений, що це не проблема. Якщо це було б, MySQL відмовляється від з'єднань з будь-яким хостом, крім 127.0.0.1, і ви не отримаєте помилку SQL 'Access Denied'.
The Pellmeister

3

Просто хотів повідомити вам про незвичну обставину, я отримав ту саму помилку. Можливо, це допомагає комусь у майбутньому.

Я розробив декілька базових поглядів, створених на сайті розробки та переніс їх на виробничий майданчик. Пізніше цього тижня я змінив PHP-скрипт, і раптом з’явились помилки, що доступ до домену відмовили користувачеві «local-web-user» @ «localhost». Об'єкт джерела даних не змінився, тому я зосередився на користувачі бази даних в MySQL, переживаючи, тим часом хтось зламав мій веб-сайт. На щастя, решта сайту здалася неушкодженою.

Згодом з’ясувалося, що винуватці були винуватцями. Наші об’єкти передачі здійснюються за допомогою іншого (і віддаленого: адміністратора @ ip-адреси) користувача, ніж користувача локального веб-сайту. Таким чином, перегляди були створені з 'admin' @ 'ip-адресою' як визначеним. За замовчуванням створення представлення "SECURITY" є

SQL SECURITY DEFINER

Коли локальний веб-користувач намагається використати представлення, він натрапляє на відсутність привілеїв визначеного для використання таблиць. Щойно безпеку було змінено на:

SQL SECURITY INVOKER

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


1
Це в кінцевому підсумку стало і моєю проблемою - погляд із відсутнім "визначеним". Одним із швидких способів дізнатися, чи відбувається це з вами, - спробувати запитувати ту саму таблицю або переглянути як root - якщо так, повідомлення про помилку змінюється на значно більш описовий "ПОМИЛКА 1449 (HY000): Користувач вказав як визначений не існує ".
Джошуа Дейвіс

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', а НЕ до '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;

Заява про грант повернула помилку. Мені потрібно було вказати таку базу даних, як: надайте всі привілеї на newdb. *
To

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

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

Я публікую цю відповідь тут, щоб, можливо, врятувати когось від використання такої ж смішної кількості часу, як і я.


2

Не впевнений, чи знайде хтось це корисним, але я зіткнувся з тією ж помилкою і шукав усіх анонімних користувачів ... Проблема виявилася тим, що для облікового запису користувача було встановлено значення "Вимагати SSL" - що я знайшов у PHPMyAdmin, перейшовши до Облікових записів користувачів та натиснувши Редагувати привілеї для користувача. Як тільки я зняв цю опцію, все працювало так, як очікувалося!


2

Підсумок налагодження

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

Є велика ймовірність, що, можливо, ви зіткнулися з цим питанням неодноразово у своїй роботі. Ця проблема траплялася у мене більшість разів через неправильно введене ім’я користувача або пароль. Хоча це одна з причин, є й багато інших шансів, що ви можете отримати це питання. Іноді це виглядає дуже схоже, але коли ви копаєтеся глибше, ви зрозумієте безліч факторів, що сприяють цій помилці. У цій публікації докладно роз'яснюються більшість найпоширеніших причин та вирішуються проблеми, щоб вирішити цю проблему.

Можливі причини:

  • Випадок 1: Помилка помилки друку: ім'я користувача або пароль.

Це найпоширеніша причина цієї помилки. Якщо ви ввели ім'я користувача або пароль неправильно, напевно ви отримаєте цю помилку.

Рішення:

Вирішення цієї помилки дуже просте. Просто введіть правильне ім’я користувача та пароль. Ця помилка буде вирішена. Якщо ви забудете пароль, ви можете скинути ім'я користувача / пароль. Якщо ви забули пароль для облікового запису адміністратора / root, існує багато способів скинути / відновити пароль. Я опублікую ще одну публікацію про те, як скинути пароль root у випадку, якщо ви забудете root-пароль.

  • Випадок 2: Доступ від неправильного хоста.

MySQL надає хост-обмеження для доступу користувачів як функції безпеки. У нашому виробничому середовищі ми обмежували запит доступу лише до серверів додатків. Ця функція справді корисна у багатьох виробничих сценаріях.

Рішення:

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

  • Випадок 3: Користувача не існує на сервері.

Цей тип помилок виникає, коли користувача, до якого ви намагаєтеся отримати доступ, не існує на сервері MySQL.

Рішення:

Якщо ви стикаєтеся з таким типом проблеми, просто перевірте, чи існує користувач у таблиці mysql.user чи ні. Якщо запис не існує, користувач не може отримати доступ. Якщо для цього користувача є вимога доступу, створіть нового користувача з цим ім'ям користувача.

  • Випадок 4: Суміш числових та іменних хостів.

Важливі моменти

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

  • Вимкнути вхід з кореневим сервером на віддаленій машині.

  • Використовуйте концепцію користувача проксі.

Мало інших понять, пов'язаних з цією темою, і деталізація цих тем є дуже різною сферою застосування цієї статті. Ми розглянемо наступні пов’язані теми в майбутніх статтях.

  • Що робити, якщо ви забули пароль root на сервері MySQL.
  • Проблеми привілеїв MySQL Access та таблиці, пов’язані з користувачем.
  • Функції безпеки MySQL з найкращими методами.

Я сподіваюся, що ця публікація допоможе вам виправити код помилки MySQL 1045 Доступ заборонений користувачеві в MySQL.


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


2

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


1

Оновлення: у версії 8.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';

0

При запуску 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();, ви отримаєте bill@10.0.0.2. Звичайно, будь-яке доменне ім’я не повинно бути вирішено цим 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 поводиться очікувано, "%" надасть вам увійти.


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

Я зіткнувся з тією ж помилкою. Установка, яка не працювала, полягає в наступному:

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

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


0

Це може стосуватися дуже мало людей, але ось що. Не використовуйте !у своєму паролі вигук .

Я зробив і отримав вищезгадану помилку за допомогою MariaDB. Коли я спростив це до просто цифр і букв, це спрацювало. Інші символи, такі як @і $добре працюють - я використовував цих символів у іншого користувача в одному екземплярі.

П'ята відповідь за цією адресою привела мене до виправлення.


0

У Windows, ось як вирішити:

ПОМИЛКА 1045 (28000): Доступ заборонено користувачеві 'root' @ 'localhost' (використовуючи пароль: НІ)

  1. Видаліть mysql з панелі управління
  2. Видаліть папку MySql з C:\Program Files,C:\Program Files (x86) таC:\ProgramData
  3. Встановити mysql

Спробував усі інші відповіді, нарешті вирішив спробувати це, і все вийшло!
jasonoriordan

0

Це також може статися, якщо MySQL працює на ОС, нечутливій до регістру, наприклад Windows.

Наприклад, я виявив, що спроба підключитися до бази даних за допомогою цих облікових даних не вдалася:

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105

ПОМИЛКА 1045 (28000): Відмовлено у доступі для користувача 'specialuser'@'10.0.1.113' (використовуючи пароль: ТАК)

Але це вдалося:

mysql> grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

Введіть пароль:



0

Сьогодні! Рішення для:

MySQL ERROR 1045 (28000): Заборонено доступ для користувача 'user' @ 'localhost' (використовуючи пароль: ТАК);

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піктограмі, де її прання має знаходитись у правому нижньому куті, перейдіть до інструментів goto та перегляньте правильний mysqlпорт.

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

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


Будь ласка, не використовуйте підставки для наголосу. Їх слід використовувати лише для коду. Такі слова, як MySQL або Wampserver, не є кодом.
Дхарман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.