Real MySQL 8.0

[Real MySQL 8.0] 7. 데이터 암호화(2)

pwhee 2023. 1. 24. 22:24

7.3 테이블 암호화

키링 플러그인은 마스터 키 생성, 관리만 담당하기 때문에 어떤 플러그인을 쓰든지 암호화된 테이블을 생성하고 활용하는 방법은 동일하다.

 

7.3.1 생성

CREATE TABLE (...) ENCRYPTION='Y'

와 같이 뒤에 ENCRYPTION='Y'를 붙이면 된다.

실제 쿼리 처리 과정에서 디스크 I/O 레이어에서 암호화/복호화가 자동으로 일어나므로, 사용자가 느끼기에는 암호화가 비활성화된 경우와 동일하다. (일반적 쿼리와 같은 방법으로 날리면 된다는 뜻)

옵션 안 붙여도 자동으로 암호화된 테이블을 생성하게 하려면 default_table_encryption 시스템 변수를 ON으로 하면 됨

 

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

응용 프로그램에서 암호화하면 인덱스 사용이 어렵다. 하지만 MySQL 암호화라면 인덱스 사용 가능.

물론 MySQL 암호화만 사용한다면 테이블의 데이터를 평문으로 확인할 수 있다는 점도 있음

 

7.3.3 테이블 스페이스 이동

암호화된 테이블에 대해 FLUSH TABLES ... FOR EXPORT 를 실행하면 임시 마스터 키가 딸려온다. 기존 마스터 키로 복호화한 것을 임시 마스터 키로 암호화해서 데이터 파일의 헤더 부분에 저장한다.

따라서 암호화된 테이블의 경우 테이블 스페이스 이동할 때는 데이터 파일과 임시 마스터 키 모두가 저장된 .cfp 파일을 함께 복사해야 한다.

임시 마스터 키 잃어버리면 복구 불가능

 

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

innodb_undo_log_encrypt, innodb_redo_log_encrypt 시스템 변수를 사용해 언두 로그, 리두 로그의 암호화가 가능하다.(8.0 부터)

암호화가 활성화되면 그 이후의 로그만 암호화해서 저장된다. 반대로 비활성화되면 그 이후의 로그만 평문으로 저장된다. (그래서 비활성화 한다고 암호화 키 삭제 해버리면 그 전 로그 복호화 불가능해져서 큰일남.)

테이블의 경우와 마찬가지로, 언두 로그, 리두 로그 모두 각각의 테이블 스페이스 키로 암호화/복호화 되고 테이블 스페이스 키는 다시 마스터 키로 암호화된다.

 

7.5 바이너리 로그 암호화

바이너리 로그, 릴레이 로그는 파일 키로 암호화되어 디스크에 저장되고, 파일 키는 다시 바이너리 로그 암호화 키로 암호화되서 각 바이너리 로그와 릴레이 로그 파일의 헤더에 저장된다.

파일키 == 테이블 스페이스 키

바이너리 로그 암호화 키 == 마스터 키

 

7.5.2 바이너리 로그 암호화 키 변경

마스터 키 변경과 비슷하다.

기존의 파일키를 새로운 바이너리 로그 암호화 키로 암호화하는 과정이 상대적으로 오래 걸린다. 해결 하려고 바이너리 로그 암호화 키의 버전을 관리하는 듯?(왜지)

 

 

7.5.3 mysqlbinlog 도구 활용

암호화 키가 없으면 복호화 불가능. 그런데 바이너리 로그 암호화 키는 MySQL 서버만 가지고 있어서 서버 안이 아니면 복호화 불가능.(linux shell 에서 복호화 불가능) 이 절에서는 서버를 통해 가져오는 방법을 소개함. 필요할 때 참고