Saya telah membuat basis data dan pengguna, dan mengizinkan akses melalui yang berikut:
create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;
Namun, ketika saya mencoba untuk terhubung ke MySQL saya mendapatkan kesalahan berikut:
$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)
Jika "%" adalah wildcard, bukankah itu juga akan mengaktifkan localhost? Namun, jika saya tidak menentukan bahwa saya ingin menggunakan kata sandi, maka saya dapat terhubung dengan baik ke database, yang tidak masuk akal karena saya menentukan kata sandi ketika saya membuat pengguna.
Saya cukup yakin Anda membutuhkan yang berikut ini:
berikan semua hak istimewa pada suatu hari * untuk 'someuser' @ '%' dengan opsi hibah;
Pernyataan GRANT Anda tidak memiliki deklarasi nama host.
sumber
GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
Jika Anda tidak dapat terhubung ke mysql menggunakan someuser @ '%' di mana '%' adalah wildcard untuk nama host, maka pastikan Anda tidak memiliki '' @localhost entri di tabel pengguna Anda. Konfirmasikan menggunakan pernyataan SQL berikut:
Jika '' @ localhost ada, maka hapus dengan mengeluarkan pernyataan SQL berikut:
lalu yang terakhir
Sekarang someuser @ '%' akan terhubung ke database.
sumber
Pemahaman saya, dan saya siap untuk diperbaiki, adalah bahwa MySQL memperlakukan localhost secara terpisah menjadi%. yaitu localhost tidak termasuk dalam wildcard.
sumber
user@%
dan tidak berhasil sampai saya termasukuser@localhost
. Kemudian saya melihat jawabannya stackoverflow.com/a/29421084/4850646 dan menyadari bahwa saya memiliki pengguna anonim dengan hostlocalhost
. Saya menghapus semua pengguna anonim dan dapat mengakses darilocalhost
untuk pengguna itu, bahkan setelah menghapususer@localhost
(dan hanya membiarkanuser@%
). Tampaknya karenalocalhost
lebih spesifik daripada%
, ia mencoba terlebih dahululocalhost
pengguna, bahkan jika itu adalah pengguna anonim!Sudahkah Anda menjalankan
flush privileges;
setelah membuat pengguna? Jika tidak, perubahan pada pengguna / izin tidak akan berlangsung hingga server dimulai ulang.Kemudian, periksa Anda tidak memiliki entri '%' @ 'localhost'.
sumber