Saya mencoba membuat pengguna MySQL yang hanya akan diizinkan untuk terhubung ke database MySQL dari nama host tertentu.
berikan semua pada db_name. * ke 'user_name'@'appserver-lan.mydomain.com' diidentifikasi oleh 'some_passwd'
Dengan memeriksa tabel pengguna di mysql db, saya dapat melihat bahwa pengguna berhasil dibuat:
gunakan mysql; pilih * dari pengguna di mana Pengguna = 'user_name' dan Host = 'appserver-lan.mydomain.com'
atau
tunjukkan hibah untuk 'username'@'appserver-lan.mydomain.com'
Nama host yang saya tentukan adalah alias untuk nama amazon-ec2, yang ketika diselesaikan oleh server DNS AWS menghasilkan alamat LAN:
[root @ db_server ~] # host appserver-lan.mydomain.com
appserver-lan.mydomain.com adalah alias untuk ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx-xxx.compute-1.amazonaws.com memiliki alamat 10.xxx .xxx.xxx
Masalahnya adalah ketika saya mencoba untuk terhubung ke basis data LAN IP dari appserver-lan ini, saya mendapatkan kesalahan akses ditolak, meskipun kata sandi sudah benar. Yang aneh di sini adalah bahwa nama host yang ditampilkan dalam kesalahan bukanlah nama host yang saya tentukan ketika pengguna dibuat:
GALAT 1045 (28000): Akses ditolak untuk pengguna 'user_name' @ ' appserver.mydomain.com ' (menggunakan kata sandi: YES)
Jadi, pertanyaan saya adalah: bagaimana cara mysql menentukan nama host klien? Saya percaya itu tidak melakukannya dengan lookup DNS terbalik, karena saya memeriksa dan tidak menunjuk ke "appserver.mydomain.com" juga tidak ke "appserver-lan.mydomain.com". Selain itu, server db tidak memiliki entri yang terkait dengan appserver di / etc / hosts.
Meringkas, saya cukup yakin ini masalah resolusi nama host, karena memberikan hak istimewa untuk host "%" atau ke LAN IP berfungsi dengan baik.
Adakah ide tentang apa yang saya lewatkan?
sumber
host -t PTR 10.1.2.3
?Jawaban:
Ini menggunakan pencarian DNS terbalik. Dibutuhkan alamat IP klien dan menggunakan catatan PTR apa pun yang dikembalikan untuk nama itu.
Menurut pendapat saya melakukan otentikasi berdasarkan nama tidak terlalu berguna sama sekali, saya sarankan Anda mempertimbangkan menggunakan alamat IP sebagai gantinya.
Lihat dokumen ini tentang bagaimana Mysql menggunakan DNS .
sumber
MySQL akan melakukan reverse DNS look up pada alamat IP untuk mendapatkan nama host. Jika Anda menjalankan AWS EC2 maka Anda dapat menetapkan IP elastis ke server Anda (ini tidak dikenakan biaya tambahan) dan kemudian meminta amazon untuk mengatur DNS terbalik untuk IP elastis untuk masuk ke nama host Anda.
Juga apakah server DB Anda juga di EC2? Karena jika demikian akan menggunakan alamat IP pribadi dari instance, jika tidak maka akan menggunakan alamat ip publik. Ini terlihat dari Anda memposting karena Anda appserver-lan adalah ip pribadi 10.XXX.XXX.XXX ditugaskan ke server Anda, bukan putlic.
Saya tidak yakin alamat IP mana yang akan digunakan jika berkomunikasi dengan wilayah yang berbeda karena saya hanya memiliki server di wilayah yang sama.
sumber
Saya baru saja mengalami masalah yang sama, di mana server mysql tampaknya melakukan pencarian DNS terbalik secara tidak benar.
Masalah yang saya miliki adalah bahwa server memiliki izin untuk 'user'@'1.2.3.4' serta 'user'@'reverse.dns'. Pengguna hanya dengan alamat IP memiliki izin minimal, tetapi server mysql menggunakan izin dari pengguna itu daripada yang dengan nama host, dan mengembalikan pesan "Akses ditolak untuk pengguna 'user'@'1.2.3.4'". Menghapus pengguna dengan alamat IP memperbaiki masalah dan memaksa server menggunakan pengguna lain pada nama host.
sumber
Saya juga melihat masalah di mana nama host dan alamat IP IPV4 dan IPV6 tidak cocok, dan di mana nama host hanya digunakan untuk izin pengguna. Misalnya, di mana ada IPV6 reverse DNS tetapi tidak ada DNS IPV6 maju.
sumber