RealMySQL 1 : 7장 데이터 암호화

일단 해볼게·2024년 10월 16일
0

book

목록 보기
17/18
  • MySQL 5.7 부터 데이터 암호화 기능 제공
    • 테이블 스페이스에 대해서만 제공
    • MySQL 8.0 부터 리두 로그, 언두 로그, 바이너리 로그 암호화 지원

MySQL 서버에서의 데이터 암호화

  • 디스크 입출력 부분에서 암호화 처리
  • 암호화 키는 키링 플러그인에 의해 관리
    • 2단계 키 관리 방식
    • 마스터 키, 테이블스페이스 키(프라이빗 키)
  • 키 관리 솔루션에서 마스터키 가져온다.
    • 암호화된 테이블이 생성될때마다 해당 테이블을 위한 임의의 테이블스페이스 키 발급
    • 마스터 키를 이용해 테이블스페이스 키 암호화 후 테이블의 데이터 파일 헤더에 저장
  • 테이블스페이스 키는 테이블이 삭제되지 않는 이상 절대 변경되지 않는다.
  • 그러나 마스터 키는 외부 파일을 이용하기 때문에 노출될 가능성 존재
    • 주기적으로 변경
  • 버퍼풀에 존재하지 않는 데이터 페이지를 읽어야 하는 경우에 복호화 과정을 거친다.
    • 복호화 시간 동안 쿼리 지연
    • 실제 사용자 쿼리 처리 쓰레드가 아닌 MySQL 서버의 백그라운드 스레드가 수행하기 때문에 사용자의 쿼리가 지연되는 것이 아니다.

암호화와 복제

  • 마스터와 레플리카 서버의 마스터 키는 달라야한다.
    • 암호화 전 값이 동일하더라도 암호화된 데이터 파일은 다르다.

테이블 암호화

  • 키링 플러그인은 마스터 키를 생성, 관리만 담당
    • 어떤 키링 플러그인을 사용하든 암호화된 테이블을 생성하고 활용하는 방법은 모두 동일

응용 프로그램 암호화와의 비교

  • 응용 프로그램에서 직접 암호화하고 MySQL 서버에 저장하면 인덱스 100% 활용 불가능
  • 응용 프로그램의 암호화, MySQL 암호화 중 선택하라면 MySQL 암호화 추천

언두 로그 및 리두 로그 암호화

  • MySQL 8.0.16 부터 InnoDB 스토리지 엔진의 리두 로그와 언두 로그 암호화된 상태로 저장 가능
  • 암호화 시 모든 리두, 언두 로그를 암호화 하는게 아니라 그 시점의 리두, 언두 로그를 암호화

바이너리 로그

  • 바이너리 로그는 의도적으로 긴 시간동안 보관하는 서비스도 있다.
    • 증분 백업을 위해 바이너리 로그를 보관하기도 한다.

mysqlbinlog 도구 활용

  • 트랜잭션 내용을 추적하거나 백업 복구를 위해 암호화된 바이너리 로그를 평문으로 복호화할 일이 자주 발생
  • 암호화된 바이너리 로그 파일 내용을 SQL 문장으로 풀면 직접 열어 볼 수 없다고 에러 발생
  • MySQL 서버가 mysql-bin.000011 로그 파일을 가지고 있다면 mysqlbinlog 도구가 MySQL 서버에 직접 접속해서 가져오는 방법이 유일
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글