mysql กำหนดชื่อโฮสต์ของลูกค้าอย่างไร


14

ฉันพยายามที่จะสร้างผู้ใช้ MySQL ซึ่งจะได้รับอนุญาตให้เชื่อมต่อกับฐานข้อมูล MySQL จากชื่อโฮสต์ที่เฉพาะเจาะจง

ให้สิทธิ์ทั้งหมดบน db_name. * เป็น 'user_name'@'appserver-lan.mydomain.com' ที่ระบุโดย 'some_passwd'

โดยการตรวจสอบตารางผู้ใช้บนฐานข้อมูล mysql ฉันจะเห็นว่าผู้ใช้สร้างเสร็จเรียบร้อยแล้ว:

ใช้ mysql; เลือก * จากผู้ใช้ที่ผู้ใช้ = 'user_name' และโฮสต์ = 'appserver-lan.mydomain.com'

หรือ

แสดงทุนสำหรับ 'username'@'appserver-lan.mydomain.com'

ชื่อโฮสต์ที่ฉันระบุเป็นชื่อแทนชื่อ amazon-ec2 ซึ่งเมื่อแก้ไขโดยเซิร์ฟเวอร์ AWS DNS จะส่งผลให้มีที่อยู่ LAN:

[root @ db_server ~] # host appserver-lan.mydomain.com

appserver-lan.mydomain.com เป็นชื่อแทนสำหรับ ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx-xxx-xxx.compute-1.amazonaws.com มีที่อยู่ 10.xxx .xxx.xxx

ปัญหาคือเมื่อฉันพยายามเชื่อมต่อกับฐานข้อมูล LAN IP จาก appserver-lan นี้ฉันได้รับข้อผิดพลาดการเข้าถึงถูกปฏิเสธแม้ว่ารหัสผ่านจะถูกต้อง สิ่งประหลาดนี่คือชื่อโฮสต์ที่แสดงในข้อผิดพลาดไม่ใช่ชื่อโฮสต์ที่ฉันได้ระบุไว้เมื่อผู้ใช้ถูกสร้างขึ้น:

ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'user_name' @ ' appserver.mydomain.com ' (ใช้รหัสผ่าน: YES)

ดังนั้นคำถามของฉันคือ mysql กำหนดชื่อโฮสต์ของลูกค้าอย่างไร ฉันเชื่อว่ามันไม่ได้ทำโดยการค้นหา DNS ย้อนกลับเนื่องจากฉันตรวจสอบแล้วและไม่ได้ชี้ไปที่ "appserver.mydomain.com" ไม่ใช่ "appserver-lan.mydomain.com" นอกจากนี้เซิร์ฟเวอร์ db ไม่มีรายการที่เกี่ยวข้องกับ appserver บน / etc / hosts

สรุปฉันค่อนข้างแน่ใจว่ามันเป็นปัญหาการแก้ปัญหาชื่อโฮสต์เนื่องจากการให้สิทธิ์พิเศษสำหรับโฮสต์ "%" หรือ LAN IP นั้นใช้งานได้ดี

ความคิดใด ๆ ของสิ่งที่ฉันหายไป?


ทำไมคุณถึงคิดว่ามันไม่ย้อนกลับ DNS จะเกิดอะไรขึ้นเมื่อคุณทำhost -t PTR 10.1.2.3?
Zoredache

โฮสต์ -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa ตัวชี้ชื่อโดเมน ip-10-xxx-xxx-xxx.ec2.internal อย่างที่คุณเห็นนี่ไม่ใช่ชื่อโฮสต์ที่แสดงในข้อความแสดงข้อผิดพลาด (appserver.mydomain.com) และนั่นทำให้ฉันคิดว่า MySQL ไม่ได้ทำการค้นหาแบบย้อนกลับ
Luis Fernando Alen

คำตอบ:


13

มันใช้การค้นหา DNS ย้อนกลับ ใช้ที่อยู่ IP ของลูกค้าและใช้ระเบียน PTR ใดก็ตามที่ส่งคืนสำหรับชื่อนั้น

ในความเห็นของฉันที่ทำการรับรองความถูกต้องตามชื่อไม่ได้มีประโยชน์มากเลยฉันขอแนะนำให้คุณพิจารณาใช้ที่อยู่ IP แทน

ดูเอกสารนี้เกี่ยวกับวิธีMySQL ใช้ DNS


ขอบคุณสำหรับลิงค์ @Zoredache ฉันต้องการหลีกเลี่ยงการใช้ที่อยู่ IP เนื่องจากอินเตอร์เฟสภายใน AWS ใช้ DHCP และการเปลี่ยนแปลง IP เป็นครั้งคราว (เมื่อใดก็ตามที่เซิร์ฟเวอร์บู๊ตฉันเดา) รวมถึงบันทึก PTR สิ่งแปลก ๆ ที่นี่คือเนื่องจากใช้การค้นหาแบบย้อนกลับจึงควรพูดว่า "การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ @ ip-10-xxx-xxx-xxx.ec2.internal" แทน appserver.mydomain.com ...
Luis Fernando Alen

1
คุณสามารถข้ามการรับรองความถูกต้องของ IP / ชื่อทั้งหมดได้หรือไม่แทนที่จะใช้ไฟร์วอลล์โฮสต์หรือตั้งค่า SSL และรับรองความถูกต้องตามใบรับรอง
Zoredache

3

MySQL จะทำการค้นหา DNS ย้อนกลับบนที่อยู่ IP เพื่อรับชื่อโฮสต์ หากคุณกำลังทำงานใน AWS EC2 คุณสามารถกำหนด IP แบบยืดหยุ่นให้กับเซิร์ฟเวอร์ของคุณ (ซึ่งไม่เสียค่าใช้จ่ายเพิ่มเติม) จากนั้นขอให้ amazon ตั้งค่า DNS ย้อนกลับสำหรับ IP แบบยืดหยุ่นเพื่อไปยังชื่อโฮสต์ของคุณ

เซิร์ฟเวอร์ฐานข้อมูลของคุณอยู่ใน EC2 ด้วยหรือไม่ เพราะถ้าเป็นเช่นนั้นจะใช้ที่อยู่ IP ส่วนตัวของอินสแตนซ์มิฉะนั้นจะใช้ที่อยู่ IP สาธารณะ ดูเหมือนว่าคุณโพสต์ในขณะที่เจ้า appserver-lan เป็น IP ส่วนตัว 10.XXX.XXX.XXX ที่กำหนดให้กับเซิร์ฟเวอร์ของคุณไม่ใช่ putlic

ฉันไม่แน่ใจว่าจะใช้ที่อยู่ IP ใดหากการสื่อสารกับภูมิภาคอื่นเนื่องจากฉันมีเซิร์ฟเวอร์ภายในภูมิภาคเดียวกันเท่านั้น


ใช่มันอยู่ใน EC2 เช่นกันและในภูมิภาคเดียวกัน ขอบคุณสำหรับเคล็ดลับแอนดี้ ฉันไม่ทราบว่าอินสแตนซ์ EC2 ใช้ IP ภายในเพื่อสื่อสารระหว่างพวกเขาแม้ว่าคุณจะระบุ IP ที่ถูกต้องสำหรับการสื่อสาร นั่นช่วยแก้ไขปัญหาของฉัน =]
Luis Fernando Alen

3

ฉันเพิ่งมีปัญหาที่คล้ายกันซึ่งเซิร์ฟเวอร์ mysql ดูเหมือนจะทำการค้นหา DNS ย้อนกลับไม่ถูกต้อง

ปัญหาที่ฉันมีคือเซิร์ฟเวอร์มีสิทธิ์สำหรับ 'user'@'1.2.3.4' เช่นเดียวกับ 'user'@'reverse.dns' ผู้ใช้ที่มีที่อยู่ IP มีสิทธิ์น้อยที่สุด แต่เซิร์ฟเวอร์ mysql ใช้สิทธิ์ของผู้ใช้นั้นมากกว่าที่จะใช้ชื่อโฮสต์และส่งคืนข้อความ "การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'user'@'1.2.3.4'" การลบผู้ใช้ด้วยที่อยู่ IP ช่วยแก้ไขปัญหาและบังคับให้ผู้ใช้อื่นใช้ชื่อโฮสต์


0

ฉันเคยเห็นปัญหาที่ชื่อโฮสต์และที่อยู่ IPV4 และ IPV6 ไม่ตรงกันและที่ชื่อโฮสต์ใช้สำหรับการอนุญาตผู้ใช้เท่านั้น ตัวอย่างเช่นที่มี IPV6 reverse DNS แต่ไม่มี forward IPV6 DNS

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.