"Akses ditolak untuk pengguna 'test'@'ip'(using password:YES)" adalah kesalahan MySQL.
Ini berarti bahwa pada tingkat jaringan semuanya berfungsi , karena ditolak akses sebagai pengguna tertentu , server harus memahami pengguna mana yang Anda coba sambungkan sebagai . Jadi jaringan, firewall, perutean, dan seterusnya dan seterusnya, semuanya harus berfungsi; server harus mendengarkan, dll.
Masalahnya terletak "hanya" di otentikasi .
Coba sambungkan secara lokal ke database (untuk mengesampingkan otentikasi) dan periksa tabel hak istimewa:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
dan ingat bahwa baris yang Anda minati adalah baris yang menyebutkan IP (karena pesan kesalahan menentukan IP , dan tidak nama host - dalam hal ini, itu bisa menjadi masalah DNS; nama host adalah nama host yang diyakini server Anda berasal , bukan nama host asal Anda sebenarnya).
Pencocokan pengguna/host berjalan dari lebih spesifik untuk kurang spesifik . Jadi jika Anda sudah memiliki:
user host password
test 1.2.3.4 foo
dan berlari,
GRANT... TO [email protected]'%' ... PASSWORD bar
...hibah ini akan bekerja dari mana saja kecuali 1.2.3.4, di mana kata sandi akan tetap 'foo'.
Dari manual (tautan di atas):
Anda mungkin terpaksa melakukannya
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
untuk memastikan bahwa tidak ada baris palsu dalam tabel pemberian yang mengacu pada 'tes' pengguna.
(Juga, HIBAH seharusnya, menurut saya,
GRANT ALL PRIVILEGES ON databasename.*
)
Keraguan keamanan (tidak terkait dengan jawaban)
Manual di atas mengatakan:Kekhususan alamat IP literal tidak terpengaruh oleh apakah ia memiliki netmask, jadi 192.168.1.13 dan 192.168.1.0/255.255.255.0 dianggap sama spesifiknya .
Sekarang sekilas 127.0.0.1/0.0.0.0
tampaknya sangat spesifik (dan tidak berbahaya) untuk localhost . Netmask, jika saya tidak salah, memastikan bahwa itu setara dengan %
, kecuali bahwa ini sangat spesifik dan akan dijalankan terlebih dahulu . Oleh karena itu
test bar %
test localfoo 127.0.0.1/0.0.0.0
berarti kata sandi untuk test
dari mana saja itu sama sekali bukan "bar", tapi "localfoo".
Tidak ada yang akan memasukkan hibah seperti itu secara tidak sengaja, tetapi ada kesalahan dan kesalahan .