[DATABASE] SERVER SETTINGS FOR DB

성장일기·2024년 7월 10일

[SWCAMP] DB

목록 보기
13/14

리눅스에 MariaDB 설치

패키지 업데이트

## 시스템의 패키지 목록 업데이트
$ sudo apt update

## 업데이트된 패키지 목록을 기반으로 시스템에 설치된 패키지들 최신 버전으로 업그레이드
$ sudo apt upgrade

MariaDB 서버 및 MariaDB 클라이언트 설치

## MariaDB 서버 설치
$ sudo apt install mariadb-server

## MariaDB 클라이언트 설치
$ sudo apt install mariadb-client

보안관련 작업 수행

## secure 설정하기
$ sudo mysql_secure_installation

## 1. root 계정 패스워드 설정: root 계정에 대한 비밀번호 설정 및 변경
## 2. 익명 사용자 제거: 기본적으로 제공되는 익명 사용자 접근 방지(y)
## 3. root 계정 원격 접속 금지: 루트 계정 원격 로그인 방지(y)
## 4. 테스트 데이터베이스 제거: 테스트 목적의 테스트 데이터베이스 제거를 통해 보안 취약점 제거(y)
## 5. 변경 사항 적용: 모든 변경 사항 적용을 위한 MySQL 서버 다시 시작(y)

root 계정으로 접속 후 DB, User 생성 후 권한 설정

## root 계정 접속
$ sudo mariadb -u root -p

## root 계정 비밀번호 입력
  • root 계정 접속 이후

    **(이 작업은 외부 접속이 가능하다고 외부에서 root 계정에 접속해서 할 수는 없음!)**
    
    **(반드시 해당 가상머신의 터미널(local)에서 진행할 것!)**
-- 계정 생성 후 데이터베이스 활용

-- 1) 새로운 master 계정 만들기
CREATE USER 'master'@'%' IDENTIFIED BY  'master'; -- 'localhost' 대신 '%'를 쓰면 외부 ip로 접속 가능하다.

-- 현재 존재하는 데이터베이스 확인
SHOW databases;

-- mysql 데이터베이스로 계정 정보 확인하기
USE mysql;	-- 기본 적으로 제공되는 mysql database

SELECT * FROM user;	-- mysql database에서 user를 확인해 계정이 추가된 것을 확인한다.

-- 2) 계정에 권한 부여
-- master 계정의 권한 확인하기
SHOW GRANTS FOR 'master'@'%';

-- 왼쪽 Navigator를 새로고침해서 masterdbdatabase(schema)가 추가된 것을 확인한다.
-- MySQL 또는 MariaDB는 개념적으로 database와 schema를 구분하지 않는다.
-- (CREATE DATABASE와 CREATE SCHEMA가 같은 개념이다.)

GRANT ALL PRIVILEGES ON *.* TO 'master'@'%';	-- root의 모든 database에 대한 모든 권한 부여

-- 권한 변경 사항 적용(메모리의 권한 테이블에 적용된 것을 다시 불러와 시스템 전체에 적용)
flush privileges;

-- master 계정의 바뀐 권한 확인하기
SHOW GRANTS FOR 'master'@'%';
  • slave 서버 활용 시
-- 계정 생성 후 데이터베이스 활용

-- 1) 새로운 slave 계정 만들기
CREATE USER 'slave'@'%' IDENTIFIED BY  'slave'; -- 'localhost' 대신 '%'를 쓰면 외부 ip로 접속 가능하다.

-- 현재 존재하는 데이터베이스 확인
SHOW databases;

-- mysql 데이터베이스로 계정 정보 확인하기
USE mysql;	-- 기본 적으로 제공되는 mysql database

SELECT * FROM user;	-- mysql database에서 user를 확인해 계정이 추가된 것을 확인한다.

-- slave 계정의 권한 확인하기
SHOW GRANTS FOR 'slave'@'%';

-- 왼쪽 Navigator를 새로고침해서 masterdbdatabase(schema)가 추가된 것을 확인한다.
-- MySQL 또는 MariaDB는 개념적으로 database와 schema를 구분하지 않는다.
-- (CREATE DATABASE와 CREATE SCHEMA가 같은 개념이다.)

GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%';	-- root의 모든 database에 대한 모든 권한 부여

-- 권한 변경 사항 적용(메모리의 권한 테이블에 적용된 것을 다시 불러와 시스템 전체에 적용)
flush privileges;

-- slave 계정의 바뀐 권한 확인하기
SHOW GRANTS FOR 'slave'@'%';
  • 의도에 따라 root 계정을 외부에서 접속하기 위한다면 아래와 같이 확인 후 권한을 적용해 외부 접속이 가능하게 할 수 있다.
-- 현재 계정 확인(root도 Host가 %가c아님을 확인)
SELECT Host,User FROM mysql.user;

-- root가 원격 접속 가능하도록 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mariadb';

-- 확인
SELECT Host,User FROM mysql.user;
  • 이후 exit를 통해 mariadb에서 나온다.

가상 머신을 통한 DB 서버 외부 접속

외부에서 DB서버 접근을 위한 환경설정 하기

💡 윈도우에 띄워진 가상 머신을 접속하고 해당 DB 서버를 활용

  • virtualbox 네트워크 설정에서 NAT → 어댑터에 브리지로 변경

  • 가상환경 구성

    • NAT
    • NAT Network
    • HOST Only Network
    • Bridge Network
  • ip확인 및 방화벽 풀기
## ifconfig 명령어를 통한 ip 주소 확인을 위한 net-tools 패키지 설
$ sudo apt-get install net-tools

## window에서 접근을 위한 ip확인(inet 주소 확인)
$ ifconfig

## mariadb 서버 접근을 위한 3306 포트 방화벽 풀기
$ sudo ufw allow 3306/tcp
  • mariadb 설정파일 수정하기
## 만약 vim을 이전에 설치 하지 않은 slave의 경우라면 vim설치부터
#$ sudo apt install vim

$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

  • mariadb 재시작
$ sudo service mysqld restart
profile
엔지니어로의 성장일지

0개의 댓글