MySql-Server ~ DBeaver로 확인하기까지

FGPRJS·2022년 12월 11일
0

AWS Linux Instance에서 Mysql-Server를 설치하고, 그것을 DBeaver로 확인하는 일련의 과정을 기재한다.


1. Putty 말고 Remote SSH

Putty가 알 수 없는 이유로 기존 방식대로는 Lightsail Instance에 접속하지 못했다.

이것을 기회로 Putty에서 벗어나 Remote SSH 같은 신규 툴을 사용해 보기로 한다.

VSCode에서 사용할 수 있는 확장인 Remote - SSH는 Microsoft에서 만들었다.

이 확장을 설치하면, 우측에 RemoteDesktop같은 아이콘이 생기는데, 이것을 클릭하여 SSH 대상에 접속하거나 새로운 접속을 생성할 수 있다.

추가를 하면, 다음과 같은 연결 명령을 설정할 수 있게 된다.
추가적으로 무언가 설정을 붙이지 않을거라면, IP 주소면 충분하다.

설정을 붙인 다음, config 파일을 설정할 수 있는데(공용 / 고유 등등), 없을 경우 생성한다.

ssh_config 파일의 예시.
Host주소부터 어떤 유저로 접속할 것인지, 그리고 Identity File 경로 등에 대한 정보를 기재할 수 있는데,
remote ssh config 등의 키워드로 검색하면 다음과 같은 사이트로부터 도움을 받을 수 있다.


2. MySql-Server 설치~설정하기

Linux Instance에 MySql-Server를 설치해야 MySql 서버로 사용할 수 있다.

설치법 및 설정법은 다음과 같은 사이트에서 쉽게 찾을 수 있다.
하기 기재된 내용은 위 사이트에서 제시하는 설치~사용법을 적당한 부분만 옮긴 것이다.


2-1. 설치

  1. apt(Advanced Packaging Tool) 업데이트
$ sudo apt update
  1. mysql-server 설치
$ sudo apt install mysql-server
  1. mysql server Daemon 실행하기
$ sudo systemctl start mysql.service

2-2. 설정

위의 3번부터 이어진다.

  1. 보안 옵션 설정.
    그냥 써도 문제는 없지만, 여러가지 기능을 한번에 해주기 때문에 권장됨.
$ sudo mysql_secure_installation
  • 암호 유효성 (User 암호의 수준 강제)
  • root 유저 패스워드
  • 설치시 제공되는 anonymous 유저 삭제
  • root 유저 원격 접속 Block

등등의 설정을 해준다.

  1. mysql 실행
    이 실행은 mysql 명령을 사용할 수 있게 해준다.
    이 이후부터 앞에 $ 표시가 아닌 mysql > 표시가 붙음에 주목하라.
$ sudo mysql
  1. 유저 확인해보기
    무슨 유저가 있는지 확인해본다.
mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;
  1. 새로운 유저 추가하기
    위 설정을 통해 root 유저는 외부 접속이 되지 않게 그냥 막아버렸다.
    DBeaver에 접속할 만한 새로운 User를 만들어, 그것을 사용한다
mysql > CREATE USER 'DBeaver'@'localhost' IDENTIFIED BY 'password';
  1. 새로운 유저에게 권한 부여하기
    DBeaver에서 사용할 유저에게 모든 기능을 사용하게 하고 싶으므로, 다음과 같이 설정한다.
mysql > GRANT ALL PRIVILEGES ON *.* TO 'DBeaver'@'localhost' WITH GRANT OPTION;
  1. mysql 실행 끄기
    이 명령어를 사용하면 다시 Linux 콘솔로 돌아온다.
mysql > exit

3. DBeaver 설정하기

Mysql-Server측 준비는 모두 끝났다. 이제 DBeaver로 접속해보자.

Server를 통해 접속하는 것은 기본적인 RDS로 접속하는 것과는 다르게 설정한다.

기존 DB 연결과 같이 시작한다.

단, 여기서의 Server Host는 RDS처럼 어떤 Instance Address를 사용하는게 아니라, LocalHost로 한다.

이 항목에서의 Authentication은 7. 항목에서 추가한 유저(DB의 유저)를 기재한다.

하지만 이 경우 SSH 접속 설정을 추가해야 한다.

[Use SSH 터널]을 활성화 시키고, 해당 서버의 정보를 기재해야 한다.

여기서의 UserName은 SSH로 연결한 Instance의 계정을 묻는 것이다. (SSH로 Instance에 접속하기 위하여)

즉, SSH로 연결하기 -> 연결한 상태에서 LocalHost (Mysql-Server의 LocalHost) 에 접속하는 것이다.


위와 같은 과정을 하면 접속이 가능해 지는 것을 확인할 수 있다.


4. SSH 터널을 사용하지 않고 DBeaver 쓰기

SSH 터널을 통하지 않는 방식에 대하여 설명한다.

Entity Framework등은 SSH 터널을 통하여 사용할 수 없기 때문에, 이 방법을 사용하여야 한다.

다음 링크를 참조한다.

MySQL-Server를 최초로 설치하였을 때 기본적인 설정은 Localhost에게만 접속이 허용하도록 되어있기 때문에, Localhost외에서도 접속이 가능하도록 하는 것이 요지이다.

4.1 MySQL-Server Config

다음과 같은 명령어를 통하여 config파일을 가져온다.

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

config 파일을 잘 살펴보면 bind-address라는 항목이 있는데, 이는 기본적으로 127.0.0.1(localhost)로 되어있다.

bind-address에 대한 정보
내부 IP에 관한 정보이다. 해당 서브넷에 존재하는 컴퓨터만 해당 MySQL-Server에 접근할 수 있다.

위와 같이 bind-address를 0.0.0.0(ALL)로 하면, 모든 IPv4 주소에 대하여 접근이 가능하다.

4.2 MySQL-User Config

[2.2 설정]의 8번 항목에서, 다음과 같이 수행했었다

mysql > GRANT ALL PRIVILEGES ON *.* TO 'DBeaver'@'localhost' WITH GRANT OPTION;

DBeaver의 계정은 localhost에 한하여서만 열려있는 계정이었다.
이렇게 0.0.0.0으로 열어버린 항목에 대해서는 접근할 수 없다.

따라서 다른 IP등으로 접속할 수 있는 계정을 만들어주는 것이 필요하다.

유저를 2-2 항목을 참조하여 추가한 후, 다음과 같이 권한을 준다.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

여기서, '%'로 할 경우, 이 계정은 모든 IP 주소에서 사용할 수 있다.
특정 IP에서만 허용하고 싶다면, % 대신 이 계정을 사용할 IP를 기재하면 된다.


4번의 과정을 거쳤다면, 이제 SSH 터널 없이 DBeaver 따위로 접속할 수 있으며, Entity Framework등으로도 접속이 가능하다.

단, 보안을 한단계 낮춘 것으로 인하여 위협이 될 수 있으므로 Firewall에 대한 설정을 견고히 해야 한다.

profile
FGPRJS

0개의 댓글