Bagaimana cara mysql menentukan nama host kliennya?

14

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?

Luis Fernando Alen
sumber
Menurut Anda mengapa ini bukan reverse DNS? Apa yang terjadi ketika Anda melakukannya host -t PTR 10.1.2.3?
Zoredache
host -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa penunjuk nama domain ip-10-xxx-xxx-xxx-xxx.ec2.internal. Seperti yang Anda lihat, ini bukan nama host yang ditampilkan dalam pesan kesalahan (appserver.mydomain.com) dan itu membuat saya berpikir MySQL tidak melakukan pencarian terbalik.
Luis Fernando Alen

Jawaban:

13

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 .

Sakit kepala
sumber
Terima kasih untuk tautannya, @Zoredache. Saya ingin menghindari menggunakan alamat IP karena antarmuka internal AWS menggunakan DHCP dan perubahan IP-nya dari waktu ke waktu (setiap kali server melakukan booting, saya kira), serta catatan PTR-nya. Yang aneh di sini adalah bahwa karena menggunakan pencarian terbalik, itu seharusnya mengatakan "Akses ditolak untuk pengguna @ ip-10-xxx-xxx-xxx-xxx.ec2.internal." bukannya appserver.mydomain.com ...
Luis Fernando Alen
1
Dapatkah Anda melewatkan otentikasi IP / nama secara bersamaan, sebagai gantinya menggunakan firewall berbasis host, atau setup otentikasi berbasis SSL dan Cert.
Zoredache
3

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.

Andy Hobbs
sumber
Ya, ada di EC2 juga dan di wilayah yang sama. Terima kasih atas tipnya, Andy. Saya tidak tahu contoh EC2 menggunakan ip internal untuk berkomunikasi di antara mereka bahkan jika Anda menentukan ip yang valid untuk komunikasi. Itu menyelesaikan masalah saya =]
Luis Fernando Alen
3

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.

Andy Beverley
sumber
0

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.

Andy Beverley
sumber