Saya telah melihat sejumlah pertanyaan serupa dan saya menunjukkan bahwa saya telah memeriksa dasar-dasarnya. Meskipun tentu saja, itu tidak berarti saya tidak melewatkan sesuatu yang sangat jelas. :-)
Pertanyaan saya adalah: mengapa saya menolak akses pada pengguna dengan hak istimewa untuk melakukan apa yang saya coba lakukan dan di mana saya sudah mengetik kata sandi dan diberi akses? (Demi kelengkapan, saya mencoba mengetik kata sandi yang salah hanya untuk memastikan bahwa klien MySQL akan menolak saya akses saat program dimulai.)
Latar Belakang:
Masuk ke cangkang mesin yang menjalankan server MySQL melalui ssh, saya masuk sebagai 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>
Luar biasa. Pembacaan saya atas jawaban untuk pertanyaan serupa menunjukkan bahwa saya harus memastikan hak istimewa terkini dengan apa yang ada di tabel hibah
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>
Selanjutnya pastikan aku adalah siapa yang aku pikirkan:
mysql> SELECT user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
... dan benar- benar memastikan:
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql>
Sejauh ini baik. Sekarang hak istimewa apa yang saya miliki?
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)
Nah, itu agak sulit dibaca, jadi mari kita coba cara ini (Anda juga akan melihat bahwa ada pengguna 'root' non-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)
Luar biasa! MySQL berpikir bahwa saya root @ localhost dan root @ localhost memiliki semua hak istimewa itu. Itu berarti saya harus dapat melakukan apa yang saya inginkan, bukan?
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)
Bagaimana saya bisa mengacaukan sesuatu yang mendasar ini?
Catatan: untuk siapa saja yang ingin menyarankan bahwa saya tidak memiliki pengguna yang bernama root dengan semua hak istimewa, itu bagus dan sesuatu yang akan saya pertimbangkan untuk dilakukan setelah saya dapat memberi pengguna lain hak istimewa.
Terima kasih!
-p
dan kata sandi. Saya tahu ini konyol tapi mungkin bisa membantu seseorang.