AWS Linux Instance에서 Mysql-Server를 설치하고, 그것을 DBeaver로 확인하는 일련의 과정을 기재한다.
Putty가 알 수 없는 이유로 기존 방식대로는 Lightsail Instance에 접속하지 못했다.
이것을 기회로 Putty에서 벗어나 Remote SSH 같은 신규 툴을 사용해 보기로 한다.
VSCode에서 사용할 수 있는 확장인 Remote - SSH는 Microsoft에서 만들었다.
이 확장을 설치하면, 우측에 RemoteDesktop같은 아이콘이 생기는데, 이것을 클릭하여 SSH 대상에 접속하거나 새로운 접속을 생성할 수 있다.
추가를 하면, 다음과 같은 연결 명령을 설정할 수 있게 된다.
추가적으로 무언가 설정을 붙이지 않을거라면, IP 주소면 충분하다.
설정을 붙인 다음, config 파일을 설정할 수 있는데(공용 / 고유 등등), 없을 경우 생성한다.
ssh_config 파일의 예시.
Host주소부터 어떤 유저로 접속할 것인지, 그리고 Identity File 경로 등에 대한 정보를 기재할 수 있는데,
remote ssh config 등의 키워드로 검색하면 다음과 같은 사이트로부터 도움을 받을 수 있다.
Linux Instance에 MySql-Server를 설치해야 MySql 서버로 사용할 수 있다.
설치법 및 설정법은 다음과 같은 사이트에서 쉽게 찾을 수 있다.
하기 기재된 내용은 위 사이트에서 제시하는 설치~사용법을 적당한 부분만 옮긴 것이다.
$ sudo apt update
$ sudo apt install mysql-server
$ sudo systemctl start mysql.service
위의 3번부터 이어진다.
$ sudo mysql_secure_installation
등등의 설정을 해준다.
$
표시가 아닌 mysql >
표시가 붙음에 주목하라.$ sudo mysql
mysql > SELECT user,authentication_string,plugin,host FROM mysql.user;
mysql > CREATE USER 'DBeaver'@'localhost' IDENTIFIED BY 'password';
mysql > GRANT ALL PRIVILEGES ON *.* TO 'DBeaver'@'localhost' WITH GRANT OPTION;
mysql > exit
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) 에 접속하는 것이다.
위와 같은 과정을 하면 접속이 가능해 지는 것을 확인할 수 있다.
SSH 터널을 통하지 않는 방식에 대하여 설명한다.
Entity Framework
등은 SSH 터널을 통하여 사용할 수 없기 때문에, 이 방법을 사용하여야 한다.
다음 링크를 참조한다.
MySQL-Server를 최초로 설치하였을 때 기본적인 설정은 Localhost에게만 접속이 허용하도록 되어있기 때문에, Localhost외에서도 접속이 가능하도록 하는 것이 요지이다.
다음과 같은 명령어를 통하여 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 주소에 대하여 접근이 가능하다.
[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에 대한 설정을 견고히 해야 한다.