본문 바로가기

개발자 레니는 지금 -/데이터 베이스를 알아보는 중

[ MySQL ] 사용자 추가, 권한 부여, 외부 접속 허용하기


# Connect Leni 💬



MySQLSet External Connection


#Ununtu 16.04 LTS


Leni post with by Tistory 2019/04/10



외부에서 MySQL에 접속해야할 일이 생겼는데 매번 localhost에서만 사용하던터라 무척 당황했다.

검색을 해보니 외부에서 MySQL에 접속하기 위해서는 권한을 넘겨줘야 한다고 한다.


MySQL를 외부에서 접속하기 위해서는 MySQL 자체에서 설정을 수정하는 것 뿐만 아니라 포트 포워딩 작업을 진행해주어야한다.

아래 과정은 포트 포워딩을 포함하지 않고 있으니 포트포워딩 방법은 인터넷에 검색해서 사용하도록 하고...



MySQL 연결

$ mysql -u root -p

- 일단 접속을 해야 권한을 줄테니, root 권한으로 접속을 하도록 한다.

접속을 하면 command 기호가 "mysql>" 로 변하게 된다.



> select host,user,authentication_string from mysql.user;

- 권한을 부여하기 전에 현재 접속 되어있는 권한을 확인해 본다.

- - - -

권한을 미리 하나 추가해 놓은 사진이라 host에 %를 가진 것이 하나 더 있지만, 초기에는 localhost에 대한 권한만 주어져 있는 것을 볼 수 있다.

- - - -



사용자 추가

> insert into mysql.user (host,user,authentication_string,ssl_cipher, x509_issuer, x509_subject) values ('%','root',password('passwd'),'','','');

> flush privileges;

%는 모든 ip host에 대해 root 권한을 허용한다는 말이다.

%부분을 수정하여 권한의 범위를 좁힐 수도 있고 기존에 있는 user 처럼 'localhost'에서만 허용할 수도 있다.

예를 들어 특정 ip에만 root 권한을 허용할 수도 있고, 특정 패턴의 ip address 에게만 권한을 허용할 수도 있다.


- - - -  제대로 잘 들어갔는지 확인 ♡

일단 "Query OK, ~" 가 떠야한다.

그 후 상위에서 사용했던 select query문을 이용해서 추가된 권한을 확인하면 된다.

- - - -



권한 삭제

delete from mysql.user where host="112.221.%" and user="root";

> flush privileges;

혹시나 넣었던 권한을 삭제하고 싶으면, 평소 사용하는 delete query문을 사용하면 된다.

위의 쿼리문은 예시이니 사용자에 맞는 쿼리문을 사용하여 삭제하도록 하자.



Listen IP 대역 변경

$ vim /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 127.0.0.1 →  bind-address = 0.0.0.0

mysqld.cnf 파일을 열어서 bind-address 내용을 수정해 준다.



MySQL 서비스 재시작

$ sudo service mysql restart

사용자 권한 수정 및 추가 등등의 작업 후에는 항상 MySQL을 재시작 해주셔야 변경내용이 저장 됩니다!