Lassen Sie mich zunächst erwähnen, dass ich & #39; ve durch viele vorgeschlagenen Fragen gegangen und fand keine relevante Antwort. Hier ist, was ich'm tun.
Ich bin mit meiner Amazon EC2-Instanz verbunden. Ich kann mich mit MySQL root mit diesem Befehl anmelden:
mysql -u root -p
Dann habe ich einen neuen Benutzer bill mit host % erstellt
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Dem Benutzer bill wurden alle Berechtigungen gewährt:
grant all privileges on *.* to 'bill'@'%' with grant option;
Dann verlasse ich den Benutzer root und versuche, mich mit bill anzumelden:
mysql -u bill -p
das richtige Passwort einzugeben und erhalte diese Fehlermeldung:
ERROR 1045 (28000): Zugriff verweigert für Benutzer 'bill'@'localhost' (mit Passwort: YES)
Als Sie die
mysql -u bill -p
und diesen Fehler erhielten
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
mysqld erwartet, dass Sie sich als bill@localhost
verbinden
Versuchen Sie, bill@localhost
zu erstellen
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
Wenn Sie eine Fernverbindung herstellen wollen, müssen Sie entweder den DNS-Namen, die öffentliche IP-Adresse oder 127.0.0.1 über TCP/IP angeben:
mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP
Sobald Sie sich angemeldet haben, führen Sie bitte Folgendes aus
SELECT USER(),CURRENT_USER();
USER() berichtet, wie Sie versucht haben, sich in MySQL zu authentifizieren
AKTUELLER_BENUTZER() meldet, wie Sie sich in MySQL anhand der Tabelle mysql.user authentifizieren durften
Dadurch erhalten Sie einen besseren Überblick darüber, wie und warum Sie sich bei MySQL anmelden durften. Warum ist diese Ansicht wichtig zu wissen? Sie hat mit dem Bestellprotokoll für die Benutzerauthentifizierung zu tun.
Hier ist ein Beispiel: Ich werde einen anonymen Benutzer auf meinem Desktop-MySQL erstellen
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, ich melde mich als anonymer Benutzer an:
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>
Die Reihenfolge der Authentifizierung ist sehr streng. Sie prüft von der spezifischsten zur am wenigsten spezifischen. Ich habe über diesen Authentifizierungsstil im DBA StackExchange geschrieben.
Vergessen Sie nicht, bei Bedarf explizit TCP als Protokoll für den mysql-Client anzugeben.
Wenn Sie mysql -u root -p
eingeben, verbinden Sie sich mit dem mysql-Server über einen lokalen Unix-Socket.
Die von Ihnen angegebene Berechtigung 'bill'@'%'
passt jedoch merkwürdigerweise nur auf TCP/IP-Verbindungen.
Wenn Sie Zugriff auf den lokalen Unix-Socket gewähren wollen, müssen Sie Rechte für 'bill'@'localhost' gewähren, was seltsamerweise nicht dasselbe ist wie 'bill'@'127.0.0.1'
Sie können auch eine TCP/IP-Verbindung mit dem mysql-Befehlszeilen-Client herstellen, um die bereits gewährten Privilegien zu nutzen, indem Sie z. B. mysql -u root -p -h 192.168.1.123
oder eine beliebige lokale IP-Adresse Ihres Rechners eingeben.