MySQL FEIL 1045 (28000): Tilgang nektet for bruker 'bill'@'localhost' (bruker passord: YES)

La meg først nevne at jeg har gått gjennom mange foreslåtte spørsmål og ikke funnet noe relevant svar. Her er hva jeg gjør.

Jeg er koblet til Amazon EC2-forekomsten min. Jeg kan logge inn med MySQL root med denne kommandoen:

mysql -u root -p

Deretter opprettet jeg en ny brukerregning med vert% ...

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

Gitt alle rettighetene til brukerregning:

grant all privileges on *.* to 'bill'@'%' with grant option;

Så avslutter jeg fra root-bruker og prøver å logge inn med bill:

mysql -u bill -p

skrev inn riktig passord og fikk denne feilen:

ERROR 1045 (28000): Tilgang nektet for brukeren 'bill'@'localhost' (bruker passord: YES)

Da du løp

mysql -u bill -p

og fikk denne feilen

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

mysqld forventer at du kobler til som bill@localhost.

Prøv å opprette bill@localhost

CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;

Hvis du vil koble til eksternt, må du angi enten DNS-navnet, den offentlige IP-en eller 127.0.0.1 ved hjelp av 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

Når du har logget inn, kan du kjøre dette

SELECT USER(),CURRENT_USER();

USER() rapporterer hvordan du forsøkte å autentisere deg i MySQL.

CURRENT_USER() rapporterer hvordan du fikk tillatelse til å autentisere i MySQL fra tabellen mysql.user.

Dette vil gi deg en bedre oversikt over hvordan og hvorfor du fikk lov til å logge på mysql. Hvorfor er denne visningen viktig å vite? Det har å gjøre med bestillingsprotokollen for brukerautentisering.

Her er et eksempel: Jeg vil opprette en anonym bruker på skrivebordet mitt 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>

OK se meg logge inn som anonym bruker:

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>

Autentiseringsrekkefølgen er svært streng. Den sjekker fra det mest spesifikke til det minste. Jeg skrev om denne autentiseringsstilen i DBA StackExchange.

Ikke glem å eksplisitt be om TCP som protokoll for mysql-klienten når det er nødvendig.

Kommentarer (7)

Når du skriver mysql -u root -p , kobler du til mysql-serveren via en lokal unix-socket.

Men tilskuddet du ga, 'bill'@'%' samsvarer bare med TCP / IP-tilkoblinger merkelig nok.

Hvis du vil gi tilgang til den lokale unix-kontakten, må du gi privilegier til 'bill'@'localhost' , som merkelig nok ikke er det samme som 'bill'@'127.0.0.1'

Du kan også koble til ved hjelp av TCP/IP med mysql-kommandolinjeklienten, for å matche rettighetene du allerede har gitt, f.eks. kjøre mysql -u root -p -h 192.168.1.123 eller hvilken lokal IP-adresse boksen din har.

Kommentarer (4)

Ok, jeg er ikke sikker, men sannsynligvis er dette my.cnf-filen i mysql-installasjonskatalogen synderen. Kommenter ut denne linjen, og problemet kan være løst.

bind-address = 127.0.0.1
Kommentarer (2)