Database/Mysql

[Real MySQL] 7-2. 데이터 암호화: 테이블 & 로그

noahkim_ 2025. 3. 9. 07:07

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.


1. 테이블 암호화

  • 일반적인 테이블 생성 구문과 동일

 

암호화

  • 테이블 생성 ENCRYPTION 옵션 추가하기
  • default_table_encrtyption 시스템 변수 활성화하기

 

응용 프로그램 암호화

버퍼 풀에 데이터가 암호화되어 적재됨
  • 인덱스를 사용할 수 없음
  • 평문의 내용을 바로 확인할 수 없음

 

테이블스페이스 이동

  • 테이블의 데이터 파일만 백업했다가 복구

 

Flush 명령어
FLUSH TABLES source_table FOR EXPORT;
  • source_table 구조를 source_table.cfg에 저장
  • source_table.ibd와 source_table.cfg를 목적지 서버로 복사
  • UNLOCK TABLES 명령어를 수행하여 잠금 풀기

 

2. 언두 로그 및 리두 로그

  • 기본적으로 평문으로 저장됨

 

암호화

  • 각각의 테이블 스페이스 키로 암호화됨 
  • 테이블의 암호화에 사용된 테이블 스페이스키가 아니라 리두 로그와 언두 로그 파일을 위한 프라이빗 키를 의미함

 

시스템 변수

  • innodb_undo_log_encrypt: 언두 로그 암호화
  • innodb_redo_log_encrypt: 리두 로그 암호화

 

3. 바이너리 로그

  • 기본적으로 평문으로 저장됨
  • 디스크에 저장된 파일에 대한 암호화만 처리함

 

암호화 키 관리

파일 키
  • 개별 로그 파일의 암호화를 위한 키
  • 자동으로 생성됨
  • 바이너리 로그 암호키로 암호화 된 후, 로그 파일의 헤더에 저장됨

 

바이너리 로그 암호화 키
  • 테이블 암호화의 마스터 키와 동일한 역할

 

ALTER INSTANCE ROTATE BINLOG MASTER KEY;
  • 바이너리 로그 암호화 키 변경

 

mysqlbinlog 도구 활용

  • 암호화된 바이너리 로그를 평문으로 복호화할 일이 많이 생김 (트랜잭션 내용 추적, 백업 복구)
  • 복호화 시, MySQL 서버가 가지고 있는 바이너리 로그 암호화 키가 필요함
  • 원격으로 MySQL 서버에 요청하여 복호화된 파일을 보는 방법밖에 없음
mysqlbinlog --read-from-remote-server -u root -p -vvv mysql-bin.000011