Linux DB

mysql 원격 접속 허용하기

2008.05.14 22:24

hostway 조회 수:42429

mysql 데이터베이스를 추가하면 기본적으로 로컬호스트에서만 접속이 가능 합니다.
mysql-client나 다른 리눅스 서버에서 원격으로 mysql 접속을 하려면 원격 호스트의 접속을 허용해 주어야 합니다. 설정 순서는 아래와 같습니다.
DB라는 db와, USER라는 db 계정이 생성되어 있는 상태에서 원격 접속 허용 설정을 하겠습니다.

1. mysql root 계정으로 mysql db에 접속한다.
[root@server21010910231 root]# /usr/local/mysql/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 10 to server version: 5.0.18-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> use mysql;
Database changed
mysql>

2. user table과 db 테이블에 접속할 호스트의 주소, 계정, 패스워드, db 등을 설정 한다.
mysql> insert into user (host,user,password) values('xx.xx.xx.xxx','USER',password('pswd'));
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> insert into db values('xx.xx.xx.xxx','USER','DB','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
Query OK, 1 row affected (0.00 sec)

첫번째 user 테이블에 입력한 사항은 xx.xx.xx.xxx 의 아이피에서 USER 계정이 pswd의 패스워드로 접속 할수 있게 설정한 것이며, 두번째 db 테이블에 입력한 사항은 xx.xx.xx.xxx번의 아이피에서 USER 계정이 DB 데이터베이스에 접속하여 사용할 수 있는 권한 설정을 한 것입니다.

3. 추가한 사항을 적용시키고 빠져 나간다.
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
[root@server21010910231 root]#

위와 같이 설정이 완료되면, xx.xx.xx.xxx 번의 아이피를 사용하는 서버에서 원격으로 mysql에 접속할 수 있게 됩니다.
단, USER 라는 db계정이 DB 라는 데이터베이스에만.. ^^

4. 호스트 주소에 아래과 같이 특정 아이피 대신 % 를 입력하면 어느곳에서나 원격으로 mysql 접속이 가능하게 됩니다.
아래와 같이 사용할 경우, 사용이 편리 하긴 하겠지만, 보안상 취약 하기 때문에 권장 하지는 않습니다. ^^

mysql> insert into user (host,user,password) values('%','USER',password('pswd'));
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> insert into db values('%','USER','DB','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');
Query OK, 1 row affected (0.00 sec)


=================================================================================


  • MySQL을 설치하면 기본적으로 로컬(localhost)에서만 접속이 가능하고 외부에서는 접속이 불가능하게 되어 있다.
외부에서 접속해보면 다음과 같은 오류 메시지가 나온다.[1]
Host '135.79.246.80' is not allowed to connect to this MySQL server
  • Toad for MySQL과 같은 DB 관리 도구를 사용하여 DB에 원격으로 접속하려면 허용해주는 로컬 작업이 필요하다.
  • 여기서는 root를 원격에서 접속할 수 있도록 설정한다. 이것을 응용하면 다른 계정에도 적용할 수 있다.

확인

  • 아래 쿼리를 날려보면 localhost가 나온다.
  • 즉 root 계정으로는 로컬에서만 접속가능하다.
  • (같은 방법으로 root 대신 다른 사용자명도 조회할 수 있다.)
SELECT Host FROM mysql.user WHERE user='root';

변경

모든 IP 허용[2]
INSERT INTO mysql.user (host,user,password) VALUES ('%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
IP 대역 허용
  • 다음과 같이 설정하면 111.222로 시작하는 모든 IP가 허용된다.
INSERT INTO mysql.user (host,user,password) VALUES ('111.222.%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.%';
FLUSH PRIVILEGES;
특정 IP 1개 허용
INSERT INTO mysql.user (host,user,password) VALUES ('111.222.33.44','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.33.44';
FLUSH PRIVILEGES;

원복

  • 모든 IP를 허용한 경우 다음과 같이 원래 상태로 복구할 수 있다.
DELETE FROM mysql.user WHERE Host='%' AND User='root';
FLUSH PRIVILEGES;