Làm thế nào để mysql xác định tên máy chủ của khách hàng?


14

Tôi đang cố gắng tạo một người dùng MySQL sẽ chỉ được phép kết nối với cơ sở dữ liệu MySQL từ một tên máy chủ cụ thể.

cấp tất cả trên db_name. * cho 'user_name'@'appserver-lan.mydomain.com' được xác định bởi 'some_passwd'

Bằng cách kiểm tra bảng người dùng trên db mysql, tôi có thể thấy rằng người dùng đã được tạo thành công:

sử dụng mysql; chọn * từ người dùng trong đó User = 'user_name' và Host = 'appserver-lan.mydomain.com'

hoặc là

hiển thị các khoản tài trợ cho 'username'@'appserver-lan.mydomain.com'

Tên máy chủ tôi đã chỉ định là bí danh cho tên amazon-ec2, khi được giải quyết bởi các máy chủ DNS AWS sẽ dẫn đến một địa chỉ LAN:

[root @ db_server ~] # máy chủ ứng dụng máy chủ-lan.mydomain.com

appserver-lan.mydomain.com là bí danh cho ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com có ​​địa chỉ 10.xxx .xxx.xxx

Vấn đề là khi tôi cố gắng kết nối với cơ sở dữ liệu LAN IP từ máy chủ ứng dụng này, tôi gặp lỗi từ chối truy cập, mặc dù mật khẩu là chính xác. Điều kỳ lạ ở đây là tên máy chủ hiển thị trong lỗi không phải là tên máy chủ tôi đã chỉ định khi người dùng được tạo:

LRI 1045 (28000): Truy cập bị từ chối đối với người dùng 'user_name' @ ' appserver.mydomain.com ' (sử dụng mật khẩu: CÓ)

Vì vậy, câu hỏi của tôi là: làm thế nào để mysql xác định tên máy chủ của khách hàng? Tôi tin rằng nó không làm như vậy bằng cách tra cứu DNS ngược, vì tôi đã kiểm tra và nó không trỏ đến "appserver.mydomain.com" cũng không phải là "appserver-lan.mydomain.com". Ngoài ra, máy chủ db không có mục nào liên quan đến máy chủ ứng dụng trên / etc / hosts.

Tóm tắt, tôi khá chắc chắn đó là vấn đề giải quyết tên máy chủ, vì việc cấp đặc quyền cho máy chủ "%" hoặc cho IP LAN hoạt động tốt.

Bất cứ ý tưởng về những gì tôi đang thiếu?


Tại sao bạn nghĩ rằng nó không đảo ngược DNS? Điều gì xảy ra khi bạn làm host -t PTR 10.1.2.3?
Zoredache

máy chủ -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpa con trỏ tên miền ip-10-xxx-xxx-xxx.ec2.iternal. Như bạn có thể thấy, đây không phải là tên máy chủ được hiển thị trong thông báo lỗi (appserver.mydomain.com) và điều đó khiến tôi nghĩ rằng MySQL không thực hiện tra cứu ngược.
Luis Fernando Alen

Câu trả lời:


13

Nó sử dụng tra cứu DNS ngược. Nó lấy địa chỉ IP của máy khách và sử dụng bất kỳ bản ghi PTR nào được trả về cho tên đó.

Theo ý kiến ​​của tôi, việc xác thực dựa trên tên không hữu ích chút nào, tôi khuyên bạn nên cân nhắc sử dụng địa chỉ IP thay thế.

Xem tài liệu này về cách Mysql sử dụng DNS .


Cảm ơn liên kết, @Zoredache. Tôi muốn tránh sử dụng địa chỉ IP vì giao diện bên trong AWS sử dụng DHCP và IP của nó thay đổi theo thời gian (bất cứ khi nào máy chủ khởi động, tôi đoán vậy), cũng như bản ghi PTR của nó. Điều kỳ lạ ở đây là vì nó sử dụng tra cứu ngược, nên có nội dung "Truy cập bị từ chối cho người dùng @ ip-10-xxx-xxx-xxx.ec2.iternal." thay vì appserver.mydomain.com ...
Luis Fernando Alen

1
Bạn có thể bỏ qua xác thực IP / tên hoàn toàn không, thay vào đó sử dụng tường lửa dựa trên máy chủ hoặc thiết lập xác thực dựa trên SSL và Chứng chỉ.
Zoredache

3

MySQL sẽ thực hiện tra cứu DNS ngược trên địa chỉ IP để lấy tên máy chủ. Nếu bạn đang chạy trong AWS EC2 thì bạn có thể gán IP đàn hồi cho máy chủ của mình (điều này không mất thêm chi phí nào) và sau đó yêu cầu amazon thiết lập DNS ngược cho IP đàn hồi đi đến tên máy chủ của bạn.

Ngoài ra máy chủ DB của bạn cũng trong EC2? Bởi vì nếu vậy nó sẽ sử dụng địa chỉ IP riêng của cá thể, nếu không nó sẽ sử dụng địa chỉ IP công cộng. Có vẻ như bạn đăng bài vì ứng dụng của bạn-lan là ip riêng 10.XXX.XXX.XXX được gán cho máy chủ của bạn, không phải là putlic.

Tôi không chắc địa chỉ IP nào sẽ được sử dụng nếu liên lạc với một khu vực khác mặc dù tôi chỉ có máy chủ trong cùng khu vực.


Vâng, đó là trên EC2 và ở cùng khu vực. Cảm ơn vì tiền boa, Andy. Tôi không biết các trường hợp EC2 sử dụng ip nội bộ để liên lạc giữa chúng ngay cả khi bạn chỉ định ip hợp lệ cho giao tiếp. Điều đó đã giải quyết vấn đề của tôi =]
Luis Fernando Alen

3

Tôi vừa gặp một vấn đề tương tự, trong đó máy chủ mysql dường như đang thực hiện tra cứu DNS ngược không chính xác.

Vấn đề tôi gặp phải là máy chủ có quyền cho 'user'@'1.2.3.4' cũng như 'user'@'reverse.dns'. Người dùng chỉ có địa chỉ IP có quyền tối thiểu, nhưng máy chủ mysql đang sử dụng quyền của người dùng đó thay vì quyền với tên máy chủ và trả về thông báo "Truy cập bị từ chối cho người dùng 'user'@'1.2.3.4'". Việc xóa người dùng bằng địa chỉ IP đã khắc phục sự cố và buộc serer sử dụng người dùng khác tại tên máy chủ.


0

Tôi cũng đã thấy các vấn đề trong đó tên máy chủ và địa chỉ IP IPV4 và IPV6 không khớp và nơi chỉ sử dụng tên máy chủ cho phép người dùng. Ví dụ: nơi có DNS đảo ngược IPV6 nhưng không có DNS IPV6 chuyển tiếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.