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에서의 접속이 가능하도록 설정되어 있음을 확인할수 있다.
'MySQL' 카테고리의 다른 글
원격 IP로 MySQL(MariaDB)에 접속이 되지 않을 때의 해법 (3) | 2018.05.28 |
---|---|
MySQL에 root 계정 비밀번호 설정하기(변경하기) (0) | 2018.05.09 |
Data too long for column 에러 해법 : MySQL의 sql_mode 변경하기 (0) | 2017.06.19 |
MySQL 한글 insert시 발생하는 ERROR 1366 (HY000): Incorrect string value: 문제 (3) | 2017.06.01 |
MySQL table의 필드 값이 한글일 경우 Java 소스에서 SELECT 실패할 경우 (0) | 2017.06.01 |