2018년 4월 30일 월요일

MySQL의 외부 IP 접속 허용하기





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에서의 접속이 가능하도록 설정되어 있음을 확인할수 있다.



댓글 없음:

댓글 쓰기