데이터를 물리적으로 암호화하기 위해 아래와 같이 구성하여 사용
1. install
data-at-rest는 10.1 버전부터 기본적으로 포함되어 있어 해당 plugin를 load함
[mysqld]
plugin_load_add = file_key_management
2. key password 생성
데이터 암호화를 위해 사용할 key 생성
openssl rand -hex 128 >> keystring.key
openssl rand -hex 128 >> keystring.key
여러개를 넣고 kestring.key 파일을 열어 각각 암호화 키에 대해 index를 넣어줌
1;xxxxxxxxxxxxxxxxxx
2;eeeeeeeeeeeeeeeee
3. key file encrypt
파일 암호화를 위한 password 파일 생성
openssl rand -hex 128 > keyfile.key
데이터 암호화 키를 가진 파일을 전체 암호화
opensssl enc -aes-256-cbc -md sha1 -pass file:keyfile.key -in keystring.key -out keyfile.enc
원본 key 정보 파일 삭제 (keyfile)
4. my.cnf 옵션 설정
아래 정보를 my.cnf에 추가하고 난 후 mysql restart 수행
(설정이 오류가 나거나 plugin를 로드 되지 않을 경우 unknown parameter 와 같이 에러발생)
[mysqld]
file_key_management_filename = /etc/mysql/encryption/keyfile.enc
file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key
file_key_management_encryption_algorithm = AES_CBC
5. encrypt 테이블 생성
암호화 테이블 생성 또는 기존 테이블 수정
create table test (id int, value varchar(100)) encrypted=yes encryption_key_id=1;
alter table t1 encrypted=yes encryption_key_id = 10;
6. encypt 구성된 테이블 확인
SELECT * FROM information_schema.INNODB_TABLESPACES_ENCRYPTION\G;
7. binlog 사용시
mysqlbinlog --read-from-remote-server 옵션 추가
8. disable encrypt
alter table test.t1 encrypted=no;
SHOW VARIABLES LIKE 'innodb_fast_shutdown'; 확인후 2에서 1로 수정하고 innodb_encrypt_log =OFF 만든후 restart
9. 기타 옵션
encrypt-binlog # binlog encrypt
innodb-encrypt-tables = ON # innodb table 전체를 암호화
innodb-encrypt-log = ON # innodb log를 암호화
innodb-encryption-threads=8 # innodb-encrypt-tables 또는 key rotating 선택시 자동수행 thread 수
10. 비교
구분 | MariaDB 10.3 | MySQL 8.0 |
encrypted InnoDB data | Y | Y |
encrypted non-InnoDB data | Aria-only | N |
encrypted InnoDB logs | Y | Y |
automatic encryption | Y | N |
enforced encryption | Y | N |
automatic key rotation | Y | N |
encrypted binary logs | Y | N |
encrypted online DDL | ? | N |
encrypted keyring | Y | Enterprise-only |
mysql.slave_master_info | N | N |
mysql.servers | N | N |
Hashicorp Vault | N | N |
AWS KMS | Y | Enterprise-only |
'RDB > MySQL' 카테고리의 다른 글
mariadb 데이터 암/복호화 (0) | 2019.04.08 |
---|---|
mariabackup 사용 (0) | 2019.04.08 |
mysql 8.0 인증오류 - sqlstate[hy000] [2054] the server (0) | 2019.03.26 |
xtrabackup 백업 및 복구 (0) | 2018.12.31 |
mysql 테이블 복구 (meta 정보 이상) (0) | 2018.05.10 |