본문 바로가기

볼봇의 코딩 생활/Linux

MariaDB 외부 접속 허용하기

보안이 생명인 데이터베이스는 외부에서 접속하는걸 쉽게 허락하지 않는다.

 

SSH 나 Telnet, FTP 등은 목표 서버 IP, User, Password 로 접속 할 수 있지만 (설정에 따라 다르게 할 수 있다.)

데이터베이스에 접속 할 때는 'IP 화이트리스트'를 추가로 적용한다.

 

즉, user/password 검증 뿐 아니라 접속자의 IP 주소까지 따진다는 의미.

 

예를 들어 192.168.111.131 컴퓨터에서 192.168.111.100 데이터베이스 서버에 myadmin 라는 계정으로

데이터베이스에 접속하려면?

192.168.111.100 데이터베이스 서버에 myadmin@192.168.111.131 라는 유저가 있어야 한다.

 

개념은 이정도로 해두고 직접 해본다.

 

MariaDB-client 설치하기

client 는 대부분 윈도우일 것이다. (물론 아니어도 문제 없다.)

아래 링크에서 mariadb를 다운로드 받는다.

 

https://downloads.mariadb.org/mariadb 

 

MariaDB - MariaDB

MariaDB 10.2 Series MariaDB 10.2 is a stable (GA) release series of MariaDB. It is built on MariaDB 10.1 with features from MySQL 5.6 & 5.7, and entirely new features not found anywhere else. See "What is MariaDB 10.2?" for an overview.

downloads.mariadb.org

여기서, 접속할 서버의 버전과 같은 client 를 설치해야한다.

서버 버전을 확인해보고 적절한 버전을 다운로드 받는다.

(필자 서버는 10.5.10 버전이다.)

 

서버에 맞는 버전을 설치하자!!

인스톨러를 실행시키고 Next 를 누르다보면 변경해야 할 점이 생긴다.

 

Client Programs 말고 나머지는 모두 설치 하지 않도록 한다.

이미 서버는 있으므로 로컬에 또 서버를 설치할 필요는 없기 때문이다.

 

하나만 남겨두고 나머지는 다 꺼버리자.

 

MariaDB 서버 설정

앞서 언급했듯이사용자 검증 뿐만 아니라 IP 검증도 함께 한다.

따라서 새로운 유저를 GRANT 할 때 IP 주소도 지정해야한다.

 

mariadb 가 설치된 서버에서, 아래 쿼리문을 적절히 변경하여 입력한다.

 

GRANT ALL ON *.* TO username@'myipaddress' IDENTIFIED BY 'p@ssw0rd';
ALL 어떤 DML 명령을 허용하겠는가? SELECT, INSERT, UPDATE 등의 명령이 있다.
ALL 을 하는 경우 모든 명령을 사용 할 수 있다.
*.* 어떤 데이터베이스의 어떤 테이블을 허용하겠는가?
예를 들어 'mydb.mytb' 를 입력하는 경우 mydb 라는 데이터베이스의 mytb 라는 테이블만 조작 할 수 있도록 허용한다.
*.* 는 모든 테이블과 데이터베이스를 다룰 수 있다.
username 어떤 사용자명을 사용하겠는가?
myipaddress 어떤 IP Address 로 부터 접속하는 유저를 허용하겠는가?
'%' 를 입력하면 모든 IP 주소로부터 오는 접속을 허용한다.
p@ssw0rd 해당 사용자의 비밀번호는 무엇인가?

예를 들어, ballbot 라는 유저가 knubot 라는 데이터베이스의 모든 테이블을 관리하게 하되, 192.168.111.* 에서 접속 할 수 있도록 허용하려면?

GRANT ALL ON knubot.* TO ballbot@'192.168.111.%' IDENTIFIED BY 'p@ssw0rd';

이렇게 쿼리를 구성하면 되겠다.

 

Windows 에서 원격으로 접속

설치를 마치고 컴퓨터를 보면, 저 프로그램이 있다.

저 친구로 명령프롬프트를 열면 mysql.exe 파일을 찾으러 컴퓨터를 투어하지 않아도 된다.

 

mysql -h mariadb-server-address -u username -p p@ssw0rd

위 명령어를 적절히 수정하여 원격으로 접속한다.

 

외부에서 성공적으로 접속했다.

ballbot 이라는 유저는 knubot 이라는 데이터베이스만을 관리 할 수 있게 했으므로

knubot 이라는 테이블만 해당 유저에게 보이는것을 확인 할 수 있다.