Anda mungkin memiliki pengguna anonim ''@'localhost'
atau ''@'127.0.0.1'
.
Sesuai manual :
Ketika beberapa pertandingan dimungkinkan, server harus menentukan yang mana yang akan digunakan. Ini mengatasi masalah ini sebagai berikut: (...)
- Ketika klien mencoba untuk terhubung, server melihat melalui baris [dari tabel mysql.user] dalam urutan diurutkan.
- Server menggunakan baris pertama yang cocok dengan nama host klien dan nama pengguna.
(...) Server menggunakan aturan penyortiran yang memesan baris dengan nilai Host paling spesifik terlebih dahulu . Nama host literal [seperti 'localhost'] dan alamat IP adalah yang paling spesifik.
Karenanya, pengguna anonim seperti itu akan "menutupi" pengguna lain seperti '[any_username]'@'%'
saat menyambung dari localhost
.
'bill'@'localhost'
tidak cocok 'bill'@'%'
, tetapi akan cocok (misalnya) ''@'localhost'
sebelum tangan.
Solusi yang disarankan adalah menghapus pengguna anonim ini (ini biasanya hal yang baik untuk dilakukan).
Hasil edit di bawah ini sebagian besar tidak relevan dengan pertanyaan utama. Ini hanya dimaksudkan untuk menjawab beberapa pertanyaan yang diajukan dalam komentar lain dalam utas ini.
Edit 1
Mengotentikasi 'bill'@'%'
melalui soket.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
Selamat datang di monitor MySQL (...)
mysql> SELECT pengguna, host dari FROM mysql.user;
+ ------ + ----------- +
| pengguna | tuan rumah |
+ ------ + ----------- +
| tagihan | % |
| root | 127.0.0.1 |
| root | :: 1 |
| root | localhost |
+ ------ + ----------- +
4 baris dalam set (0,00 dtk)
mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| USER () | CURRENT_USER () |
+ ---------------- + ---------------- +
| bill @ localhost | tagihan @% |
+ ---------------- + ---------------- +
1 baris dalam set (0,02 dtk)
mysql> TAMPILKAN VARIABEL SEPERTI 'skip_networking';
+ ----------------- + ------- +
| Variable_name | Nilai |
+ ----------------- + ------- +
| skip_networking | ON |
+ ----------------- + ------- +
1 baris dalam set (0,00 dtk)
Edit 2
Pengaturan yang sama persis, kecuali saya mengaktifkan kembali jaringan, dan sekarang saya membuat pengguna anonim ''@'localhost'
.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
Selamat datang di monitor MySQL (...)
mysql> CREATE USER '' @ 'localhost' DIIDENTIFIKASI OLEH 'anotherpass';
Kueri OK, 0 baris terpengaruh (0,00 dtk)
mysql> Sampai jumpa
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
--socket = / tmp / mysql-5.5.sock
GALAT 1045 (28000): Akses ditolak untuk 'tagihan' @ 'localhost' pengguna (menggunakan kata sandi: YES)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-h127.0.0.1 --protocol = TCP
GALAT 1045 (28000): Akses ditolak untuk 'tagihan' @ 'localhost' pengguna (menggunakan kata sandi: YES)
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-hlocalhost --protocol = TCP
GALAT 1045 (28000): Akses ditolak untuk 'tagihan' @ 'localhost' pengguna (menggunakan kata sandi: YES)
Edit 3
Situasi yang sama seperti pada edit 2, sekarang memberikan kata sandi pengguna anonim.
root @ myhost: /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
Selamat datang di monitor MySQL (...)
mysql> SELECT USER (), CURRENT_USER ();
+ ---------------- + ---------------- +
| USER () | CURRENT_USER () |
+ ---------------- + ---------------- +
| bill @ localhost | @localhost |
+ ---------------- + ---------------- +
1 baris dalam set (0,01 dtk)
Kesimpulan 1, dari edit 1: Seseorang dapat mengotentikasi 'bill'@'%'
melalui soket.
Kesimpulan 2, dari edit 2: Apakah seseorang terhubung melalui TCP atau melalui soket tidak berdampak pada proses otentikasi (kecuali seseorang tidak dapat terhubung seperti orang lain kecuali 'something'@'localhost'
melalui soket, jelas).
Kesimpulan 3, dari edit 3: Meskipun saya tentukan -ubill
, saya telah diberi akses sebagai pengguna anonim. Ini karena "aturan penyortiran" yang disarankan di atas. Perhatikan bahwa di sebagian besar instalasi default, ada kata sandi, pengguna anonim (dan harus diamankan / dihapus).
FLUSH PRIVILEGES
?