Mysql
 sql >> база данни >  >> RDS >> Mysql

ГРЕШКА В MySQL 1045 (28000):Достъпът е отказан за потребител 'bill'@'localhost' (използвайки парола:ДА)

Вероятно имате анонимен потребител ''@'localhost' или ''@'127.0.0.1' .

Съгласно ръководството :

Когато са възможни множество съвпадения, сървърът трябва да определи кое от тях да използва. Той решава този проблем, както следва:(...)

  • Когато клиент се опита да се свърже, сървърът преглежда редовете [на таблица mysql.user] в сортиран ред.
  • Сървърът използва първия ред, който съответства на името на хоста на клиента и потребителското име.

(...)Сървърът използва правила за сортиране, които подреждат редове с първо най-специфичните стойности на хоста .Литерални имена на хост [като 'localhost'] и IP адресите са най-конкретни.

Следователно такъв анонимен потребител би "маскирал" всеки друг потребител като '[any_username]'@'%' при свързване от localhost .

'bill'@'localhost' отговаря на 'bill'@'%' , но ще съвпада (напр.) ''@'localhost' предварително.

Препоръчителното решение е да премахнете този анонимен потребител (така или иначе това обикновено е добре).

Редакциите по-долу са предимно неотносими към основния въпрос. Те са предназначени само да отговорят на някои въпроси, повдигнати в други коментари в тази тема.

Редактиране 1

Удостоверяване като 'bill'@'%' през контакт.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | [email protected]%         |
    +----------------+----------------+
    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' .

    [email protected]:/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

    [email protected]:/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)
    [email protected]:/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)
    [email protected]:/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, сега предоставя паролата на анонимния потребител.

    [email protected]:/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() |
    +----------------+----------------+
    | [email protected] | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Заключение 1, от редакция 1:Човек може да се удостовери като 'bill'@'%' през контакт.

Заключение 2, от редакция 2:Дали човек се свързва чрез TCP или чрез сокет няма влияние върху процеса на удостоверяване (освен не може да се свърже като всеки друг освен 'something'@'localhost' през гнездо, очевидно).

Заключение 3, от редакция 3:Въпреки че посочих -ubill , получих достъп като анонимен потребител. Това се дължи на "правилата за сортиране", препоръчани по-горе. Забележете, че в повечето инсталации по подразбиране без парола, анонимен потребител съществува (и трябва да бъде защитен/премахнат).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql след тригер за вмъкване, който актуализира колоната на друга таблица

  2. Как работи функцията REGEXP_INSTR() в MySQL

  3. 2 начина за изброяване на всички съхранени процедури в MySQL

  4. Как да настроите набора от символи и съпоставяне на таблица в MySQL

  5. Обратно проектиране на MySQL база данни с помощта на MySQL Workbench