Ich habe mir eine Reihe ähnlicher Fragen angesehen und zeige, dass ich die Grundlagen überprüft habe. Das heißt aber natürlich nicht, dass ich etwas völlig Offensichtliches nicht verpasst habe. :-)
Meine Frage lautet: Warum wird mir der Zugriff auf einen Benutzer verweigert, der die Berechtigung hat, das zu tun, was ich versuche, und wo ich das Kennwort bereits eingegeben und den Zugriff erhalten habe? (Der Vollständigkeit halber habe ich versucht, das falsche Passwort einzugeben, um sicherzustellen, dass der MySQL-Client mir beim Programmstart den Zugriff verweigert.)
Hintergrund:
Angemeldet bei der Shell des Computers, auf dem der MySQL-Server über ssh ausgeführt wird, melde ich mich als root an:
[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Genial. Das Lesen der Antworten auf ähnliche Fragen legt nahe, dass ich sicherstellen sollte, dass die Berechtigungen mit den Angaben in den Gewährungstabellen aktuell sind
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
Als nächstes stellen Sie sicher, dass ich der bin, für den ich mich halte:
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
... und wirklich wirklich sicherstellen:
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
So weit, ist es gut. Welche Privilegien habe ich jetzt?
mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Das ist etwas schwer zu lesen, also versuchen wir es auf diese Weise (Sie werden auch feststellen, dass es einen nicht-lokalen Host-Root-Benutzer gibt):
mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
Host: localhost
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
*************************** 2. row ***************************
Host: [HOSTNAME].com
User: root
Password: *[OBSCURED]
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
2 rows in set (0.00 sec)
Genial! MySQL glaubt, dass ich root @ localhost bin und root @ localhost all diese Berechtigungen hat. Das heißt, ich sollte tun können, was ich will, oder?
mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Wie hätte ich etwas so Grundlegendes vermasseln können?
Randnotiz: Für alle, die vorschlagen möchten, dass ich keinen Benutzer namens root mit allen Berechtigungen habe, ist das großartig und etwas, das ich in Betracht ziehen werde, sobald ich einem anderen Benutzer einige Berechtigungen erteilen kann.
Danke dir!
-p
und dem Passwort. Ich weiß, dass es albern ist, könnte aber jemandem helfen.