본문 바로가기
Web Programing!/Mysql

[MYSQL] mysql 외부에서 원격접속 가능하게 하기

by 어설픈봉봉이 2011. 9. 10.
반응형
SMALL




Mysql 외부에서 원격접속 가능하게 하기




아래와 같이 설정해 줍니다.

Mysql 관리자(root)로 로그인 합니다.

Mysql> use mysql;

Mysql> update db set host='%' where user='user' and host='localhost';

Mysql> update user set host='%' where user='user' and host='loccalhost';

Mysql> flush privileges;

Mysql> quit

ps > % - 모든 호스트에 대한 접속 허용

     xxx.xxx.xxx.xxx - 해당 아이피에 대한 접속만 허용

패스워드 설정

? MySQL Password 설정

/usr/local/mysql/bin/mysqladmin -u root password "암호"

? 비번을 잊어 버렸을 때…

- mysql root 비밀번호 잊어 먹었을 때

[root@localhost local]# service mysqld stop

[root@localhost local]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &

[root@localhost local]# mysql

Welcome to the MySQL monitor.  Commands end with ; or g.

Your MySQL connection id is 2 to server version: 4.0.20-log

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

mysql> use mysql

Database changed

mysql> update user set password=password('비밀번호') where  user='root';

Query OK, 2 rows affected (0.02 sec)

Rows matched: 2  Changed: 2  Warnings: 0

mysql>flush privileges;

mysql> exit

Bye

[root@localhost local]# service mysqld stop

[root@localhost local]# service mysqld start

? MySQL Dump(dump시 기본 character set = utf8 입니다.)

- mysqldump ?uroot ?p <database명> --default-character-set=euckr > <파일명>

mysql 데이터베이스를 추가하면 기본적으로 로컬호스트에서만 접속이 가능 합니다.

mysql-client나 다른 리눅스 서버에서 원격으로 mysql 접속을 하려면 원격 호스트의 접속을 허용해 주

야 합니다. 설정 순서는 아래와 같습니다.

fd_db라는 db와, fd_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 등을 설정 한다.

1) mysql> insert into user (host,user,password) values('10.30.100.150','fd_user',password('fd!#%'));

Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> insert into db values('10.30.100.150','fd_db','fd_user','y','y','y','y','y','y','y','y','y','y');

Query OK, 1 row affected (0.00 sec)

첫번째 user 테이블에 입력한 사항은 10.30.100.150 의 아이피에서 fd_user 계정이 fd!#%의 패스워드로

접속 할수 있게 설정한 것이며,

두번째 db 테이블에 입력한 사항은 10.30.100.150번의 아이피에서 fd_user 계정이 fd_db 데이터베이스에

속하여 사용할 수 있는 권한 설정을 한 것입니다.

2) 사용자 생성 & 사용자에게 DB할당

shell> mysql --user=root -p mysql

mysql> INSERT INTO user VALUES('localhost','사용자',PASSWORD('비밀번호'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user VALUES('%','사용자',PASSWORD('비밀번호'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO d

(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES

('localhost','DB명','사용자','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO db(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES('%','DB명','사용자','Y','Y','Y','Y','Y','Y');

mysql> FLUSH PRIVILEGES; (or shell prompt: mysqladmin -u root -pxxxx reload)

CASE 2: GRANT명령을 이용한 사용자 생성(이 방법이 권장된다)

kang이라는 DB를 만들고, 이 DB를 아래에서 나열된 권한을 가진 kang이라는 사용자를 생성

create database kang;

GRANT USAGE ON DB이름.* TO 사용자ID@접속호스트 IDENTIFIED BY "패스워드"

grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to kang@localhost identified by 'kang';

grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to kang@'%' identified by 'kang';

mysql> create database kang;

Query OK, 1 row affected (0.00 sec)

mysql> grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to kang@localhost identified by 'kang';

Query OK, 0 rows affected (0.00 sec)

mysql> grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to kang@'%' identified by 'kang';

Query OK, 0 rows affected (0.01 sec)

3. 추가한 사항을 적용시키고 빠져 나간다.

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

mysql> exit]

Bye

[root@server21010910231 root]#

위와 같이 설정이 완료되면, 10.30.100.150번의 아이피를 사용하는 서버에서 원격으로 mysql에 접속할

수 있게 됩니다. 단, fd_user 라는 db계정이 fd_db 라는 데이터베이스에만.. ^^

4. 호스트 주소에 아래과 같이 특정 아이피 대신 % 를 입력하면 어느곳에서나 원격으로 mysql 접속이

가능하게 됩니다.

아래와 같이 사용할 경우, 사용이 편리 하긴 하겠지만, 보안상 취약 하기 때문에 권장 하지는 않습니다. ^^

mysql> insert into user (host,user,password) values('%','fd_user',password('fd!#%'));

Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> insert into db values('%','fd_db','fd_user','y','y','y','y','y','y','y','y','y','y');

Query OK, 1 row affected (0.00 sec)



모든것을 마치고 마지막에 꼭 할것!

mysql>flush privileges;

 

반응형