mysql은 클라이언트의 호스트 이름을 어떻게 결정합니까?


14

특정 호스트 이름에서만 MySQL 데이터베이스에 연결할 수있는 MySQL 사용자를 만들려고합니다.

'some_passwd'로 식별 된 'user_name'@'appserver-lan.mydomain.com'에 db_name. *의 모든 권한 부여

mysql db에서 user 테이블을 확인하면 사용자가 성공적으로 생성되었음을 알 수 있습니다.

mysql을 사용하십시오. User = 'user_name'및 Host = 'appserver-lan.mydomain.com'인 사용자에서 *를 선택하십시오.

또는

'username'@'appserver-lan.mydomain.com'에 대한 보조금 표시

내가 지정한 호스트 이름은 amazon-ec2 이름의 별칭으로, AWS DNS 서버에서 확인할 때 LAN 주소가됩니다.

[root @ db_server ~] # 호스트 appserver-lan.mydomain.com

appserver-lan.mydomain.com은 ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com의 별칭입니다. ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com의 주소는 10.xxx입니다. .xxx.xxx

문제는이 appserver-lan에서 데이터베이스 LAN IP에 연결하려고 할 때 암호가 정확하지만 액세스 거부 오류가 발생한다는 것입니다. 여기서 이상한 점 은 오류에 표시된 호스트 이름이 사용자를 만들 때 지정한 호스트 이름이 아니라는 것입니다.

오류 1045 (28000) : 사용자 'user_name'@ ' appserver.mydomain.com '에 대한 액세스가 거부되었습니다 (비밀번호 사용 : 예).

그래서 내 질문은 : mysql은 어떻게 클라이언트 호스트 이름을 결정합니까? 나는 역 DNS 검색으로 그렇게하지 않는다고 믿습니다. 왜냐하면 "appserver.mydomain.com"이나 "appserver-lan.mydomain.com"을 가리 키지 않기 때문입니다. 또한 db 서버에는 / etc / hosts의 appserver와 관련된 항목이 없습니다.

요약하면 호스트 "%"또는 LAN IP에 대한 권한을 부여하면 제대로 작동하므로 호스트 이름 확인 문제 일 것입니다.

내가 잃어버린 것에 대한 아이디어가 있습니까?


왜 리버스 DNS가 아니라고 생각합니까? 당신은 어떻게됩니까 host -t PTR 10.1.2.3?
Zoredache

host -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 링크에 감사드립니다. AWS 내부 인터페이스가 DHCP를 사용하고 때때로 (서버가 부팅 될 때마다) PTR 레코드를 사용하기 때문에 IP 주소 사용을 피하고 싶습니다. 여기서 이상한 점은 역방향 조회를 사용하기 때문에 "사용자 @ ip-10-xxx-xxx-xxx.ec2.internal에 대한 액세스가 거부되었습니다."라는 것입니다. appserver.mydomain.com 대신 ...
Luis Fernando Alen

1
대신 호스트 기반 방화벽을 사용하거나 SSL 및 인증서 기반 인증을 설정하여 IP / 이름 인증을 모두 건너 뛸 수 있습니다.
Zoredache

3

MySQL은 IP 주소에서 역방향 DNS 조회를 수행하여 호스트 이름을 얻습니다. AWS EC2에서 실행중인 경우 서버에 탄력적 IP를 할당 한 다음 (추가 비용 없음) 탄력적 IP가 호스트 이름으로 이동하도록 역방향 DNS를 설정하도록 Amazon에 요청할 수 있습니다.

또한 DB 서버가 EC2에도 있습니까? 그렇다면 인스턴스의 프라이빗 IP 주소를 사용하고 그렇지 않으면 퍼블릭 IP 주소를 사용하게됩니다. appserver-lan은 putlic이 아닌 서버에 할당 된 10.XXX.XXX.XXX 개인 IP이므로 게시물에서 보입니다.

같은 지역 내에 서버 만 있었지만 다른 지역과 통신 할 경우 어떤 IP 주소가 사용 될지 잘 모르겠습니다.


예, EC2와 같은 지역에 있습니다. 팁 주셔서 감사합니다, 앤디 EC2 인스턴스가 통신에 유효한 IP를 지정하더라도 내부 IP를 사용하여 인스턴스간에 통신하는 것을 몰랐습니다. 그건 내 문제를 해결 =]
루이스 페르난도 알렌

3

방금 mysql 서버가 역방향 DNS 조회를 잘못 수행하는 것처럼 보이는 비슷한 문제가 있습니다.

내가 가진 문제는 서버에 'user'@'1.2.3.4'와 'user'@'reverse.dns'에 대한 권한이 있다는 것입니다. IP 주소 만 가진 사용자에게는 최소한의 권한이 있었지만 mysql 서버는 호스트 이름이 아닌 해당 사용자의 권한을 사용하고 "사용자가 'user'@'1.2.3.4'액세스가 거부되었습니다."라는 메시지를 반환했습니다. IP 주소를 가진 사용자를 삭제하면 문제가 해결되고 serer는 호스트 이름에서 다른 사용자를 사용하도록 강요했습니다.


0

또한 IPV4 및 IPV6 호스트 이름과 IP 주소가 일치하지 않고 호스트 이름 만 사용자 권한으로 사용되는 문제가 있습니다. 예를 들어 IPV6 역방향 DNS는 있지만 정방향 IPV6 DNS는없는 경우입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.