sql >> Databáze >  >> RDS >> Mysql

CHYBA MySQL 1045 (28000):Přístup odepřen uživateli 'bill'@'localhost' (s použitím hesla:ANO)

Pravděpodobně máte anonymního uživatele ''@'localhost' nebo ''@'127.0.0.1' .

Podle příručky :

Je-li možné více shod, musí server určit, kterou z nich použít. Tento problém řeší následovně:(...)

  • Když se klient pokusí připojit, server prohlédne řádky [tabulky mysql.user] v seřazeném pořadí.
  • Server používá první řádek, který odpovídá názvu hostitele klienta a uživatelskému jménu.

(...)Server používá pravidla řazení, která řadí řádky nejprve podle nejkonkrétnějších hodnot hostitele .Doslovné názvy hostitelů [jako 'localhost'] a IP adresy jsou nejkonkrétnější.

Takový anonymní uživatel by tedy „zamaskoval“ jakéhokoli jiného uživatele, jako je '[any_username]'@'%' při připojování z localhost .

'bill'@'localhost' odpovídá 'bill'@'%' , ale odpovídal by (např.) ''@'localhost' předem.

Doporučeným řešením je zahodit tohoto anonymního uživatele (to je obvykle dobré udělat tak jako tak).

Níže uvedené úpravy se většinou netýkají hlavní otázky. Tyto jsou určeny pouze k zodpovězení některých otázek vznesených v jiných komentářích v tomto vláknu.

Úprava 1

Ověřování jako 'bill'@'%' prostřednictvím zásuvky.

    [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)

Úprava 2

Úplně stejné nastavení, až na to, že jsem znovu aktivoval síť a nyní vytvářím anonymního uživatele ''@'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)

Úprava 3

Stejná situace jako v úpravě 2, nyní poskytujeme heslo anonymního uživatele.

    [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)

Závěr 1 z úpravy 1:Lze se ověřit jako 'bill'@'%' prostřednictvím zásuvky.

Závěr 2 z úpravy 2:To, zda se člověk připojuje přes TCP nebo přes soket, nemá žádný vliv na proces ověřování (kromě toho, že se nelze připojit jako kdokoli jiný než 'something'@'localhost' přes zásuvku, samozřejmě).

Závěr 3 z úpravy 3:Ačkoli jsem zadal -ubill , byl mi udělen přístup jako anonymní uživatel. Důvodem jsou výše uvedená „pravidla řazení“. Všimněte si, že ve většině výchozích instalací bez hesla, anonymní uživatel existuje (a měl by být zajištěn/odebrán).



  1. Načítání jednoho řádku, jednoho sloupce s CHOP

  2. Typy textových, ntextových a obrazových dat> nelze porovnávat ani třídit, s výjimkou použití operátoru IS NULL nebo LIKE>

  3. Načtěte data CSV do MySQL v Pythonu

  4. Jak vytvořit křížový dotaz v návrhovém zobrazení v Accessu