SSH 터널을 통해 연결할 때 MySQL 액세스 거부 오류


12

몇 달 동안 나는 아무런 문제없이 SSH 터널을 통해 로컬 테스트 서버에서 실행되는 MySQL 인스턴스에 연결했습니다. 그럼에도 불구하고 서버가 Sequel Pro의 로그인 시도를 오류로 거부하기 시작했습니다.

액세스가 거부되어 호스트 127.0.0.1에 연결할 수 없습니다.

사용자 이름과 비밀번호를 다시 확인하고 현재 위치에서 액세스 할 수 있는지 확인하십시오.

MySQL은 말했다 : 사용자 'root'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : YES)

SSH 터널이 아닌 SSH를 통해 서버에 직접 연결된 경우 터미널에서 로그인 할 수 있습니다. 이 문제는 Sequel Pro에만 국한된 것이 아니며 나 자신도 마찬가지입니다. MySQL Workbench를 통해 연결할 때 사무실의 다른 사람들과 동일한 오류가 발생합니다. 나는 안전을 위해 비밀번호를 재설정 mysqladmin했지만 문제는 아닙니다.

더 자세히 살펴보기 시작할 때 Sequel Pro에 입력 한 "127.0.0.1"대신 오류가 서버를 "localhost"로보고하는 것을 알았습니다. 친구는 아마도 잘못된 오류 처리 일 것이라고 제안했지만 MySQL에서 localhost와 127.0.0.1의 큰 차이를 감안할 때 이상하게 보입니다.

터널링 문제를 해결하기 위해 root @ %에 대한 액세스 권한을 부여하여 직접 연결할 수 있습니다. 이것은 대부분 테이블 데이터를 보거나 새 데이터베이스를 만들 수 있습니다. 유일한 문제는 사용자를 만들 때 오류가 발생한다는 것입니다.

사용자 'root'@ '%'에 대한 액세스가 거부되었습니다 (암호 사용 : YES)

이상하게도 사용자가 실제로 생성되었으므로 부여와 관련된 문제 일뿐입니다. 다시 말하지만 터미널에서 루트로 로그인하면 무엇이든 할 수 있습니다.

터널 연결 및 (아마도) 권한 부여 명령에 액세스 거부 오류가 발생하는 이유를 아는 사람이 있습니까?

참고로 MySQ는 대부분 기본 설정을 가진 버전 5.6.16이며, MAC OS X 서버 시스템에서 Homebrew를 통해 설치됩니다.

최신 정보

현재 루트에 액세스 권한이 부여 된 호스트 목록은 다음과 같습니다.

mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host           | user |
+----------------+------+
| %              | root |
| 127.0.0.1      | root |
| ::1            | root |
| localhost      | root |
+----------------+------+
4 rows in set (0.00 sec)

내가 이해 한 것처럼 첫 번째 행 ( "%")은 다른 행을 실제로 중복시켜야합니까?

업데이트 2

보조금 문제를 수정했습니다. root @ % 사용자에게는 with grant option마지막에 추가 권한이있는 모든 권한이 부여되지 않았 으므로 부여 이외의 모든 작업을 수행 할 수 있습니다. 여전히 SSH 터널이 거부되는 이유를 알고 싶습니다.


"%"계정을 만들기 전에 "127.0.0.1"과 "localhost"를 만들었는데 둘 다 작동하지 않습니다. 맞습니까?
Sverre

localhost는 실제로 올바른 호스트에있는 경우에만 작동하므로 이론 상으로는 127.0.0.1 (localhost와 동등한 네트워크) 만 ssh 터널을 통해 작동해야합니다. 적어도 OS와 같은 유닉스에서.
Sverre

답변:


18

MySQL에서 localhost키워드는 MySQL 소켓을 사용하여 연결되도록 예약되어 있으므로 127.0.0.1127.0.0.1의 MySQL 네트워크 포트에 대한 TCP 연결 에는 ip-address 를 사용해야합니다 . 서버 모두 특별히에서 사용자에게 권한을 부여해야한다는이 수단 127.0.0.1, 클라이언트가 사용해야 -h 127.0.0.1하는 대신 로컬 소켓에 연결하는 터널을 통해 이동합니다.

SSH 포트 전달을 사용하여 액세스하려면 다음과 같은 것이 필요합니다.

GRANT SELECT ON *.* TO user@`127.0.0.1`

그런 다음 실행

FLUSH PRIVILEGES;

그리고 아마도

FLUSH QUERY CACHE;

여전히 작동하지 않으면 서버 프로세스를 다시 시작하십시오.

역방향 DNS 조회 후 오류 메시지 127.0.0.1에서 localhost디버깅을 어렵게 만듭니다.

현상태대로 설명서 를 설명합니다 :

Unix에서 MySQL 프로그램은 호스트 이름 localhost를 다른 네트워크 기반 프로그램과 비교하여 예상과 다른 방식으로 호스트 이름을 특수하게 처리합니다. 로컬 호스트에 연결하기 위해 MySQL 프로그램은 Unix 소켓 파일을 사용하여 로컬 서버에 연결을 시도합니다. 포트 번호를 지정하기 위해 - -port또는 -P옵션이 제공된 경우에도 발생합니다 . 클라이언트가 로컬 서버 사용에 대한 TCP / IP 접속을 할 수 있도록하기 위해 --host또는 -h의 호스트 이름 값을 지정하는 127.0.0.1로컬 서버의 또는 IP 주소 또는 이름을. --protocol=TCP옵션 을 사용하여 로컬 호스트에 대해서도 연결 프로토콜을 명시 적으로 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

--protocol옵션을 사용하면 다른 옵션이 기본적으로 다른 프로토콜로 설정되어 있어도 특정 유형의 연결을 설정할 수 있습니다.


2
아! 그런 다음 127.0.0.1을 볼 때 오류 메시지에 localhost가 나타나는 이유를 설명합니다. 그럼에도 불구하고 루트 사용자에게는 @ 127.0.0.1의 모든 권한이 부여되었지만 SSH 터널을 통해 연결할 때 여전히 액세스 거부 오류가 발생합니다. 내가했던 정확한 진술은 :grant all on *.* to 'root'@'127.0.0.1' with grant option;
Adam

나는이 문제를 겪고 있으며 실제로 호스트 대 소켓 문제라는 것이 분명합니다. ssh -h 127.0.0.1 -u root -p서버에서 원격으로 입력 하면 연결도 거부됩니다.
fuzzyTew

-h 127.0.0.1mysql을 재부팅하여 서버 에서 연결 이 끊어지는 문제를 해결 했지만 ssh 소켓이 여전히 작동하지 않습니다
fuzzyTew

여기 있습니다 1. 서버는 @ 127.0.0.1에 부여해야합니다. 서버를 재부팅 할 때까지 이것은 걸리지 않았습니다. 2. 로컬 소켓 대신 터널이 사용되도록 로컬 호스트는 로컬 호스트가 아닌 127.0.0.1에 연결되어야합니다 .
fuzzyTew

1

과거에 ssh tunel을 사용하여 "localhost"에 모두 부여와 "127.0.0.1"에 모두 부여하는 것에는 차이가 있으므로 "localhost"부여 대신 또는 "127.0.0.1"에 부여를 시도하십시오.


또는 반대의 경우, 귀하의 경우는 다음과 같습니다
Sverre

감사합니다. 루트가 부여 된 호스트 목록을 포함하도록 질문을 업데이트했습니다. Sequel Pro에서 MySQL 서버로 "127.0.0.1"을 입력했지만 MySQL 오류가 "localhost"로보고하는 것이 이상하다는 것을 알았습니다. 그래도 이것이 문제라고 생각하지 않습니다.
Adam

다른 모든 사용자에게 암호가 있습니까? 또한 터널을 통해 mysql에 연결할 때 실제로 사용하는 구문은 무엇입니까?
Sverre

mysql 설정에서 루트 사용자에 대한 제한이 있습니까?
Sverre

모든 루트 암호가 동일하지만 기쁨이 없는지 확인하기 위해 grant명령문을 다시 실행하십시오 identified by ...
Adam

0

Sequel을 사용하여 터널을 만드는 대신 터널을 직접 만드는 것은 무엇입니까?

ssh -Cc 복어 -Nf -vv -L3306 : localhost : 3306 sshuser @ domain

그런 다음 Sequel을 127.0.0.1:3306에 연결하십시오. 연결할 수 있습니까? 터미널 (또는 ssh 클라이언트 로그)에 어떤 것이 나타 납니까?

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