원격 MySQL 연결 활성화 : ERROR 1045 (28000) : 사용자의 액세스 거부


136

Windows XP에서 실행되는 MySQL 5.1.31

로부터 지역 다음과 같이 MySQL 서버 (192.168.233.142) 내가 루트로 연결할 수 있습니다 :

>mysql --host=192.168.233.142 --user=root --password=redacted

A로부터 원격 컴퓨터 (192.168.233.163), I는 MySQL의 포트가 열려 있음을 볼 수있다 :

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

그러나 원격 컴퓨터 에서 mysql에 연결하려고하면 다음과 같은 메시지가 나타납니다.

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

mysql.user에는 2 개의 항목 만 있습니다.

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

원격 액세스를 활성화하려면 무엇을 더해야합니까?

편집하다

아래 Paulo가 제안한 것처럼 %에 대한 mysql.user 항목을 IP 특정 항목으로 바꾸려고 했으므로 이제 사용자 테이블은 다음과 같습니다.

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

그런 다음 컴퓨터를 다시 시작했지만 문제가 지속됩니다.

답변:


211

이것을 루트로 넣어야합니다.

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

여기서 IP는 액세스를 허용하려는 IP이고 USERNAME은 연결에 사용하는 사용자이며 PASSWORD는 관련 비밀번호입니다.

IP에서 액세스를 허용하려면 IP %대신

그리고 당신은 넣어

FLUSH PRIVILEGES;

또는 mysql 서버를 다시 시작하면됩니다.


로컬 mysql 클라이언트 없이이 작업을 수행 할 수있는 방법이 있습니까?
cmcginty

특정 IP의 권한을 제거하는 방법?
Umair Ayub

4
bind-address 설정을 주석 처리해야했기 때문에 stackoverflow.com/a/21151255/470749도 도움이되었습니다. 원격 권한을 부여하는 것만으로는 충분하지 않습니다.
Ryan

8
답변에 설명되어 있지 않지만 PASSWORD계정 비밀번호로 대체하십시오 . 난 단지 변경 위의 시도 USERNAMEIP내가 변경 될 때까지 나를 위해 작동하지 않았다 PASSWORD.
Richard Parnaby-King

이 작업을 수행 한 후,뿐만 아니라 다음과 같은 대답이라고 팔로우 : stackoverflow.com/a/21151255/445438
budhajeewa

85

내가 할 때까지 원격 액세스 권한을 부여 한 후에도 같은 오류가 발생했습니다.

에서 /etc/mysql/my.cnf

최신 버전의 mysql에서 파일의 위치는 /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(이 줄을 주석으로 처리하십시오. bind-address = 127.0.0.1)

그런 다음를 실행하십시오 service mysql restart.


6
또는 bind-address = 0.0.0.0으로 변경
lolski

2
주석 처리 bind-address만으로는 효과가 없었습니다. 하나 bind-address = 0.0.0.0또는 bind-address = <server_ip>작품.
chhantyal

58

MySQL 서버에서는 기본적으로 원격 액세스가 비활성화되어 있습니다. 사용자에게 원격 액세스를 제공하는 프로세스는 다음과 같습니다.

  1. 내 SQL bin 폴더로 이동하거나 다음에 추가하십시오. PATH
  2. 루트 mysql -uroot -proot(또는 루트 비밀번호가 무엇이든) 로 루트에 로그인하십시오 .
  3. 성공하면 얻을 것이다 mysql>
  4. 해당 사용자에게 모두 액세스 권한을 부여하십시오.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

여기서 IP는 IP 주소를 원격으로 액세스 할 수있는 경우 원격 액세스를 허용하려는 %IP 주소입니다.

예:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

이것은 다른 사용자를위한 것입니다.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

이것이 도움이되기를 바랍니다.


+1은 탁월한 세부 정보를 위해 실제로 0 rows affected표준 임을 확인하는 데 도움이되었습니다. :) 또한 service mysqld restart마지막에 권장됩니다. [ mysqld때로는 그냥 mysql]
Nathan Dortman

# 참고 : 버전 5.6+의 경우 "권한 없음"(권한 없음)을 사용하십시오.
Nicke Manarin

21

파울로의 도움으로 해결책을 찾게되었습니다. 다음의 조합이었습니다.

  • 암호는 달러 기호를 포함
  • 리눅스 쉘에서 연결하려고했습니다.

bash 쉘은 달러 기호를 환경 변수 로 확장 하기 위한 특수 문자로 취급 하므로 백 슬래시로 이스케이프 처리해야합니다. 또한 달러 기호가 암호의 마지막 문자 인 경우에는이 작업을 수행 할 필요가 없습니다 .

예를 들어, 비밀번호가 "pas $ word"인 경우 Linux bash에서 다음과 같이 연결해야합니다.

# mysql --host=192.168.233.142 --user=root --password=pas\$word

4
위의 내용 외에도 /etc/mysql/my.cnf를 확인하고 bind-address = 127.0.0.1
Buminda

2
: 또는 하나는 $의 확장을 방지하기 위해 작은 따옴표를 사용할 수 있습니다 mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb

비밀번호에 '$'. 아주 재미있는. 정말 감사합니다 !!
Nagendra Kakarla

잠시 동안 모니터를 대고 머리를 때린 후이 문제가 발생했습니다. 나는했다! 그리고 @ 내 비밀번호에 @. 비밀번호를 변경하고 권한을 플러시하고 다시 돌아 왔습니다. 감사!
AJM

9

방화벽이 있습니까? 포트 3306이 열려 있는지 확인하십시오.

Windows에서는 기본적으로 mysql 루트 계정이 생성되어 설치 중에 원격 컴퓨터에서 액세스 할 수있는 옵션을 선택하지 않은 경우에만 로컬 호스트에서 액세스 할 수 있습니다.

hostname으로 '%'를 사용하여 원하는 사용자를 작성하거나 업데이트하십시오.

예 :

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';

6
서버는 "오류 1045 (28000) : 액세스 거부"로 응답합니다. 방화벽 블록이 시간 초과되면 ...
Paulo H.

그냥 먼저 게시하고 싶었습니다. 나의 나쁜
Vamsi Krishna B

@Krish - 당신이 제안 모든 것은 이미 질문에 덮여
마이크 체임벌린을

5
  1. flush privileges다시 시도 하십시오.

  2. 권한 부여를 다시로드하려면 서버를 다시 시작하십시오.

  3. 호스트가 "192.168.233.163"인 사용자를 작성하십시오. "%"가 모두 허용하지 않는 것 같습니다 (이상합니다)


고마워, 나는 그것을 시도했지만 아무 소용이 없었다. 귀하의 제안으로 질문을 업데이트했습니다.
Mike Chamberlain

4
다른 사용자를 만들고 모든 보조금을 설정하는 것을 잊지 마십시오.CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
Paulo H.

4

제 경우에는 cent OS에서 원격 mysql 서버에 연결하려고했습니다. 많은 솔루션 (모든 권한 부여, IP 바인딩 제거, 네트워킹 사용)을 거친 후에도 여전히 문제가 해결되지 않았습니다.

다양한 솔루션을 살펴보면서 iptables를 발견했는데 mysql 포트 3306이 연결을 수락하지 않는다는 것을 알게되었습니다.

다음은이 문제를 확인하고 해결 한 방법에 대한 작은 메모입니다.

  • 포트가 연결을 수락하는지 확인 :

    텔넷 (mysql 서버 ip) [portNo]

  • 포트에서 연결을 허용하기 위해 ip 테이블 규칙 추가 :

    iptables -A 입력 -i eth0 -p tcp -m tcp --dport 3306 -j 수락

  • 프로덕션 환경에서는 권장하지 않지만 iptables가 올바르게 구성되지 않은 경우 규칙을 추가해도 문제가 해결되지 않을 수 있습니다. 이 경우 다음을 수행해야합니다.

    서비스 iptables 중지

도움이 되었기를 바랍니다.


3

동적 IP를 사용하는 경우 192.168.2. %에 대한 액세스 권한을 부여하면 매번 IP 주소에 대한 액세스 권한 부여에 대해 걱정할 필요가 없습니다.


1

Amazon EC2 Linux 인스턴스의 MYSQL에 원격 로그인하는 데 어려움을 겪고있었습니다. 해결책은 내 보안 그룹에 내 IP 주소를 포함하는 MySQL 포트 3306에 대한 인바운드 규칙이 포함되어 있는지 확인하는 것입니다 (또는 어디에서나 0.0.0.0/0). 이 규칙을 추가하자마자 즉시 원격으로 연결할 수 있습니다.


1

mysql 설정 파일의 새로운 위치는

/etc/mysql/mysql.conf.d/mysqld.cnf

0

MySQL ODBC 3.51 드라이버는 암호의 특수 문자가 처리되지 않는다는 것입니다.

"경고 – GRANT 명령의 암호에! @ # $ % ^?와 같은 특수 문자가 포함되어 있으면 MySQL ODBC 3.51에 심각한 두통이 발생할 수 있습니다. MySQL ODBC 3.51 ODBC 드라이버는 암호 상자에서 이러한 특수 문자를 지원하지 않습니다. http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/ 에서 "액세스 거부"(암호 사용 : YES) "오류 메시지 만 표시됩니다 .


0

비밀번호없이 사용자 / 호스트 조합이 생성되었을 수 있습니다.

GUI 응용 프로그램을 사용하여 기존 사용자의 새 호스트를 추가 할 때 기존 암호가 새 사용자 / 호스트 조합에도 사용된다고 가정했습니다.

나는 로그인 할 수 있었다

mysql -u username -p PASSWORD

IPADDRESS가 아닌 로컬로

mysql -u --host=HOST -p PASSWORD

(암호를 사용하지 않고 실제로 IPADDRESS에서 로그인 할 수 있음)

mysql -u --host=HOST

비밀번호 허용 액세스 설정 :

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

1
감사합니다 .Mysql 서버에 원격으로 연결하는 데 많은 시간을 보냈 으며이 줄은 많은 도움이되었습니다. 사용자의 비밀번호를 설정할 ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number때이 기사로 연결되는 오류가 발생했습니다 . knowmysql.blogspot.com/2013/09/… 이 단계를 수행 한 후 마침내 서버에 연결할 수 있습니다.
Andy Forceno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.