본문 바로가기
IT/예외처리

MySQL 외부 접속 (ERROR 1130 (00000): Host 'x.x.x.x' is not allowed to connect to this MySQL server)

by 최고영회 2013. 12. 24.
728x90
반응형
SMALL

MySQL 접속 시 로컬에서는 잘되다가 외부에서 접속 시 다음과 같은 에러에 직면할 수 있다.

C:\>mysql -u username -p password -h xxx.xxx.xxx.xxx
ERROR 1130 (00000): Host 'x.x.x.x' is not allowed to connect to this MySQL server

 

이는 권한 문제로 root로 접속 후 다음 명령으로 해결할 수 있다.

ex)

계정 ID : test

계정 PWD : test

DataBase : beef_mng

접속 가능 IP : 192.168.0.105

GRANT ALL PRIVILEGES ON beef_mng.* TO test@"192.168.0.105" identified by 'test';

 

모든 IP에 접속 가능하도록 하려면

GRANT ALL PRIVILEGES ON beef_mng.* TO test@"%" identified by 'test';

grant all privileges on *.* root@"%" identified by 'pwd' with grant option;

 

-----------------------------------------------------------------------------------------------------------

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 db(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) 
-- 이상 끝 --

728x90
반응형
LIST