MySQL의 외부 IP 접속 허용하기


Java에서 MySQL을 접속할 때 localhost로 접속하거나 127.0.0.1로 접속할 때는 정상적으로 잘 되던 것이 


String url = "jdbc:mysql://192.168.x.x:3306/mysql";


장비의 실제 IP주소나 도메인 이름으로 접속할때 다음과 같은 에러가 발생할 때 


javax.servlet.ServletException: java.sql.SQLException: null,  message from server: "Host 'xxxx' is not allowed to connect to this MySQL server"


이 경우는 MySQL을 외부에서 접속할 수 있도록 권한을 허용해 주어야 한다.


mysql -uroot -p

Enter password:


로 접속해서 다음 과정으로 외부 IP에서 접속할 수 있도록 권한을 허용해 주어야 한다.


mysql> use mysql;

Database changed

mysql>


다음 명령을 실행해 보면 MySQL에 접속할 수 있는 user들의 계정과 접속이 가능한 host가 다음과 같이 나타날 것이다.


mysql> select host, user from user;

+-----------+------+

| host         | user |

+-----------+------+

| 127.0.0.1   | root |

| ::1           | root |

| localhost   |      |

| localhost   | root |

+-----------+------+

4 rows in set (0.00 sec)


위에서 보는 바와 같이 접속이 가능한 host가 localhost와 127.0.0.1에 대해서만 root id로 접속이 가능하다.  따라서 다음코드는 정상적으로 접속이 가능하다.

String url = "jdbc:mysql://localhost:3306/mysql";

String url = "jdbc:mysql://127.0.0.1:3306/mysql";


그러나 만일 MySQL이 설치된 컴퓨터의 IP가 만일 192.168.122.19라고 한다면 다음과 같은 코드는 "Host 'xxxx' is not allowed to connect to this MySQL server"과 같은 에러가 발생한다.


String url = "jdbc:mysql://192.168.122.19:3306/mysql";


다음 명령어로 외부 접속 권한을 설정한다.

mysql> GRANT ALL PRIVILEGES ON DB명.* TO 사용자계정@'IP주소' identified by 'password';

예) mysql> grant all privileges on mysql.* to 'root'@'%' identified by 'xxxxx';


위에서 IP주소 부분을 %로 지정하면 모든 외부의 IP를 모두 허용한다는 뜻이다.


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


이후부터는 외부 IP에서의 접속이 정상적으로 실행된다.


mysql> select host, user from user;

+-----------+------+

| host        | user |

+-----------+------+

| %           | root |

| 127.0.0.1  | root |

| ::1           | root |

| localhost  |      |

| localhost  | root |

+-----------+------+

5 rows in set (0.00 sec)


위에서 보는 바와 같이 host가 %로 모든 IP에서의 접속이 가능하도록 설정되어 있음을 확인할수 있다.



+ Recent posts