MySQL을 외부 IP에서 접속할 수 있도록 하기 위해서는 설정이 필요하다.

아래에 각각 모든 IP에서 접속 / 특정 IP에서 접속 / 원래상태로 복구하는 방법에 대한 정리를 하도록 하겠다.


1. 모든 IP에서 접속

use mysql;

INSERT INTO mysql.user(host, user, password) VALUES('%', 'root', password('패스워드'));

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;

기본적으로 위의 내용을 차례대로 입력할 경우 root라는 계정으로 접속할 경우 모든 외부 IP에서 접속이 가능하다.

하지만 MySQL의 버전에 높아지면서 위의 내용을 입력할 경우 보안 관련 오류가 발생할 수 있다.

이 경우 오류 메세지는 두 가지가 발생할 수 있는데 각각 아래의 두 가지의 방법으로 해결이 가능하다.


- ERROR 1364(HY000): Field 'ssl_cipheer' doesn't have a default value 

use mysql;

INSERT INTO mysql.user(host, user, password, ssl_cipher, x509_issuer, x509_subject) VALUES('%', 'root', password('패스워드'), '', '', '');

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;


- ERROR 1364(HY000): Field 'authentication_string' doesn't have a default value 

use mysql;

INSERT INTO mysql.user(host, user, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES('%', 'root', password('패스워드'), '', '', '');

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;

참고로 authentication_string로 password를 변경한 경우 VALUES에서 password('패스워드')에 변경이 일어나지 않는다.




2. 특정 IP에서 접속

  이 경우에는 VALUES에서 HOST값을 변경하면 된다. 아래의 예제는 111.222.xxx.xxx의 IP에 접속이 가능하며 한 IP만 접속이 가능하게 하려면 해당 IP를 정확히 적어주면 된다.

use mysql;

INSERT INTO mysql.user(host, user, password) VALUES('111.222.%', 'root', password('패스워드'));

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;




2. 원래 상태로 복구

  외부에서 접속하지 못하도록 하기 위해서는 입력한 내용을 아래와 같이 삭제하면 된다.

use mysql;

DELETE FROM mysql.user WHERE HOST = '%' AND User = 'root';

FLUSH PRIVILEGES;


+ Recent posts