ฉันดูคำถามที่คล้ายกันจำนวนหนึ่งดังนั้นฉันจึงแสดงให้เห็นว่าฉันได้ตรวจสอบข้อมูลเบื้องต้นแล้ว แม้ว่าแน่นอนว่านั่นไม่ได้หมายความว่าฉันไม่ได้พลาดบางสิ่งบางอย่างที่ชัดเจนโดยสิ้นเชิง :-)
คำถามของฉันคือ: เหตุใดฉันจึงปฏิเสธการเข้าถึงผู้ใช้ที่มีสิทธิ์ในการทำสิ่งที่ฉันพยายามทำและที่ฉันได้พิมพ์รหัสผ่านและได้รับสิทธิ์การเข้าถึงแล้ว? (เพื่อความสมบูรณ์ฉันพยายามพิมพ์รหัสผ่านผิดเพื่อให้แน่ใจว่าไคลเอนต์ MySQL จะปฏิเสธไม่ให้ฉันเข้าถึงเมื่อเริ่มต้นโปรแกรม)
พื้นหลัง:
ล็อกอินเข้าสู่เชลล์ของเครื่องที่รันเซิร์ฟเวอร์ MySQL ผ่าน ssh ฉันเข้าสู่ระบบด้วยรูท:
[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>
น่ากลัว การอ่านคำตอบของคำถามที่คล้ายกันของฉันแสดงให้เห็นว่าฉันควรตรวจสอบให้แน่ใจว่าสิทธิพิเศษเป็นปัจจุบันกับสิ่งที่อยู่ในตารางสิทธิ์
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
ต่อไปตรวจสอบให้แน่ใจว่าฉันเป็นคนที่ฉันคิดว่าฉัน:
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
... และทำให้แน่ใจจริงๆ :
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
จนถึงตอนนี้ดีมาก ตอนนี้ฉันมีสิทธิพิเศษอะไรบ้าง
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)
ตอนนี้อ่านยากหน่อยให้ลองใช้วิธีนี้ (คุณจะได้เห็นว่ามีผู้ใช้ 'รูท' ที่ไม่ใช่ 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)
! น่ากลัว MySQL คิดว่าฉันเป็น root @ localhost และ root @ localhost มีสิทธิ์เหล่านั้นทั้งหมด นั่นหมายความว่าฉันควรจะสามารถทำสิ่งที่ฉันต้องการใช่ไหม?
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)
ฉันจะทำให้บางสิ่งบางอย่างในแบบพื้นฐานนี้สับสนได้อย่างไร
หมายเหตุด้านข้าง: สำหรับทุกคนที่ต้องการแนะนำว่าฉันไม่มีชื่อผู้ใช้รูทที่มีสิทธิ์ทั้งหมดมันยอดเยี่ยมมากและบางสิ่งบางอย่างที่ฉันจะทำเมื่อฉันสามารถมอบสิทธิ์ให้ผู้ใช้รายอื่น
ขอบคุณ!
-p
และรหัสผ่าน ฉันรู้ว่ามันโง่ แต่อาจช่วยใครบางคน