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 |