Tôi đã xem xét một số câu hỏi tương tự và vì vậy tôi chứng minh rằng tôi đã kiểm tra những điều cơ bản. Mặc dù vậy, điều đó không có nghĩa là tôi đã bỏ lỡ điều gì đó hoàn toàn rõ ràng. :-)
Câu hỏi của tôi là: tại sao tôi bị từ chối truy cập vào người dùng với các đặc quyền để làm những gì tôi đang cố gắng làm và nơi tôi đã nhập mật khẩu và được cấp quyền truy cập? (Để hoàn thiện, tôi đã thử gõ sai mật khẩu chỉ để đảm bảo rằng máy khách MySQL sẽ từ chối tôi truy cập khi bắt đầu chương trình.)
Lý lịch:
Đăng nhập vào shell của máy chạy máy chủ MySQL thông qua ssh, tôi đăng nhập bằng root:
[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>
Tuyệt vời. Việc tôi đọc các câu trả lời cho các câu hỏi tương tự cho thấy rằng tôi nên đảm bảo rằng các đặc quyền hiện tại với những gì có trong các bảng cấp
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
Tiếp theo hãy chắc chắn rằng tôi là người mà tôi nghĩ tôi là:
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
... và thực sự thực sự chắc chắn:
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
Càng xa càng tốt. Bây giờ tôi có những đặc quyền gì?
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)
Bây giờ hơi khó đọc, vì vậy hãy thử theo cách này (bạn cũng sẽ thấy rằng có một người dùng 'root' không phải localhost):
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)
Tuyệt vời! MySQL nghĩ rằng tôi là root @ localhost và root @ localhost có tất cả những đặc quyền đó. Điều đó có nghĩa là tôi phải có thể làm những gì tôi muốn, phải không?
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)
Làm thế nào tôi có thể làm hỏng cái gì đó cơ bản này?
Lưu ý bên lề: đối với bất kỳ ai muốn đề xuất rằng tôi không có người dùng có tên root với tất cả các đặc quyền, điều đó thật tuyệt và tôi sẽ cân nhắc làm một khi tôi có thể cung cấp cho người dùng khác một số đặc quyền.
Cảm ơn bạn!
-p
và mật khẩu. Tôi biết nó ngớ ngẩn nhưng có thể giúp đỡ một ai đó.