DB

Percona MySQL TDE 설정

구로모논 2025. 12. 28. 19:47

Dockerfile(8.4 기준)

# Percona Server for MySQL 8.4
FROM percona/percona-server:8.4
USER root
# 1) 키 저장할 디렉토리 생성
RUN mkdir -p /var/lib/mysql-keyring && \
  chown mysql:mysql /var/lib/mysql-keyring && \
  chmod 700 /var/lib/mysql-keyring
# 2) 키링 컴포넌트 매니페스트 / 설정 파일 복사
COPY mysqld.my /usr/sbin/mysqld.my
COPY component_keyring_file.cnf /usr/lib64/mysql/plugin/component_keyring_file.cnf
RUN mkdir -p /etc/my.cnf.d
USER mysql

 

my.cnf

[mysqld]
...

# InnoDB 테이블 기본 암호화
default_table_encryption=ON

# InnoDB redo / undo 로그 암호화
innodb_redo_log_encrypt = ON
innodb_undo_log_encrypt = ON

binlog_encryption = ON

...

 

mysqld.my

{
  "components": "file://component_keyring_file"
}

 

컴포넌트 설치(MySQL 클라이언트)

INSTALL COMPONENT 'file://component_keyring_file';

-- 설치 확인
SELECT * FROM mysql.component;
SELECT * FROM performance_schema.keyring_component_status;

 

적용 확인

-- 테이블 생성 후

SELECT TABLE_NAME, CREATE_OPTIONS
FROM information_schema.tables
WHERE TABLE_NAME = '테이블명';

-- CREATE_OPTIONS에 ENCRYPTION='Y'가 있다면 적용 된 것
-- 기존에 생성한 테이블에는 적용되지 않기 때문에 따로 설정이 필요하다.
-- 아래 쿼리에서 조회한 결과를 실행
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ENCRYPTION=\"Y\";')
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'DB명';

 

 

TDE는 DB 파일을 암호화 한 것이기 때문에, SELECT 쿼리를 이용해 조회하는 경우나 DB 툴을 이용해 조회하는 경우에는 모든 데이터를 평문으로 확인할 수 있다.

'DB' 카테고리의 다른 글

Percona MySQL 감사로그 설정  (0) 2025.12.28
[DB] 풀 인덱스 스캔, 인덱스 전용 스캔(커버링 인덱스)  (0) 2025.12.28
Database Table Lock  (0) 2025.04.14
[MySQL] 테이블 파티셔닝  (0) 2025.04.14