MySQL InnoDB 표 공간 암호 화 예제 상세 설명

머리말
MySQL 5.7.11 부터 MySQL 은 InnoDB 에 대해 단독 테이블 공간 에 저 장 된 테이블 의 데이터 암호 화 를 지원 합 니 다.이 기능 은 물리 표 공간 데이터 파일 에 정적 암호 화 를 제공 합 니 다.이 암호 화 는 엔진 내부 데이터 페이지 단계 의 암호 화 수단 으로 데이터 페이지 가 파일 시스템 에 기 록 될 때 암호 화 되 며 암호 화 는 AES 알고리즘 을 사용 하 며 복호화 는 파일 에서 메모리 로 읽 을 때 이 루어 진다.
1.암호 화 플러그 인 설정
1.1 프로필 수정
my sql 프로필[my sqld]x 항목 에 다음 과 같은 내용 을 추가 합 니 다.

plugin_dir=/usr/local/mysql5.7/lib/mysql/plugin   #     ,        
early-plugin-load="keyring_file.so"      #     
keyring_file_data=/data/mysql3306/keyring/keyring  #      ,    
innodb_file_per_table=1                #          
1.2 암호 화 에 필요 한 경 로 를 만 들 고 권한 설정
창설 시 주의해 야 할 키 링file_data 에 설 정 된 keyring 은 시작 할 때 자동 으로 생 성 됩 니 다.이 단계 에서 해당 디 렉 터 리 를 만 들 면 됩 니 다.

mkdir -p /data/mysql3306/keyring/
chown -R mysql:mysql /data/mysql3306/keyring/
chmod 750 /data/mysql3306/keyring
1.3 MySQL 재 부팅
my sql 을 다시 시작 하면 주의/data/my sql 3306/keyring 디 렉 터 리 에서 keyring 파일 이 생 성 되 었 습 니 다.

다시 시작 한 후에 도 my sql 오류 로그 에 오류 정보 가 있 는 지 확인 하고 오류 가 없 으 면 계속 진행 합 니 다.
1.4 플러그 인 상태 보기
시작 후 플러그 인 이 유효 하 는 지 확인 할 수 있 습 니 다.

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_Type,PLUGIN_Library FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring_file';
+--------------+---------------+-------------+-----------------+
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_Type | PLUGIN_Library |
+--------------+---------------+-------------+-----------------+
| keyring_file | ACTIVE  | KEYRING  | keyring_file.so |
+--------------+---------------+-------------+-----------------+
1 row in set (0.01 sec)
쇼 plugins 명령 으로 보 거나

2 테스트 암호 화 테이블 공간
2.1 암호 화 된 새 테이블 만 들 기
새 시 계 를 만 들 고 ENCRYPTION='Y',암호 화 표 공간 을 추가 합 니 다.

mysql> create table test1(
id int primary key auto_increment, 
name varchar(20),
key name(name))
 ENCRYPTION='Y';
Query OK, 0 rows affected (0.02 sec)
이 때 키 링 파일 도 달라 집 니 다.

2.2 신규 데이터
새로 추 가 된 테스트 표 에 테스트 데 이 터 를 추가 하고 보기

mysql> insert into test1(id,name) values(1,'anm'),(2,'keyring');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)
2.3 암호 화 여부 수정
테스트 취소 표 공간 암호 화

mysql> show create table test1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                   |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='Y' |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table test1 ENCRYPTION='N';
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> show create table test1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                   |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='N' |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)
암호 화

mysql> alter table test1 ENCRYPTION='Y';
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)
따라서 표 공간 암호 화 방식 은 온라인 으로 조정 할 수 있 고 데이터 조회 에 영향 을 주지 않 습 니 다.
그리고 키 링file_data 도 동적 으로 조정 할 수 있 습 니 다.비교적 간단 하 므 로 시연 하지 않 겠 습 니 다.
2.4 통계 표 공간 암호 화 표
어떤 표 의 표 공간 이 암호 화 되 었 는 지 알 고 싶 으 면 데이터 사전 표 에서 볼 수 있 습 니 다.

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='testdb2' and CREATE_OPTIONS='ENCRYPTION="Y"';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| testdb2  | test1  | ENCRYPTION="Y" |
+--------------+------------+----------------+
1 row in set (0.00 sec)
3.이상 처리
키 링 파일 이 손상 되 거나 잘못 삭제 되면 어떤 상황 이 발생 합 니까?
3.1 백업 키 링 파일
안전 을 위해 서 먼저 keyring 파일 을 백업 하 세 요.

[root@mha1 keyring]# cp -p keyring keyring.bak
[root@mha1 keyring]# ll -h 
total 8.0K
-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring
-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring.bak
3.2 키 링 삭제
키 링 파일 직접 삭제

[root@mha1 keyring]# rm -f keyring
[root@mha1 keyring]# ll -h 
total 4.0K
-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring.bak
3.3 데이터 가 정상 인지 확인
데이터 및 새 암호 화 테이블 이 성 공 했 는 지 확인

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)


mysql> create table test2(id int primary key auto_increment, name varchar(20),key name(name)) ENCRYPTION='Y';
Query OK, 0 rows affected (0.01 sec)
키 릭 파일 을 잃 어 버 려 도 정상적으로 작 동 할 수 있다 는 얘 기다.
3.4 데이터베이스 재 부팅
데이터 베 이 스 를 다시 시작 하면 키 링 파일 이 자동 으로 생 성 됩 니 다.

이 때 암호 화 테이블 보기

mysql> select * from test1;
ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.
암호 화 테이블 만 들 기

mysql> create table test3(id int primary key auto_increment, name varchar(20),key name(name)) ENCRYPTION='Y';
Query OK, 0 rows affected (0.02 sec)
새 시 계 는 초기 화 할 때 에 해당 하기 때문에 가능 합 니 다.
그러면 원 키 링 을 복원 한 다음 에 데이터 베 이 스 를 다시 시작 하면 또 성공 할 수 있 습 니 다.

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)
4 keyring 관리
4.1 정기 백업
매일 백업 할 수 있 지만 백업 경로 와 일상 백업 이 분리 되 어 복원 이 필요 할 때 대상 파일 로 복사 합 니 다.
4.2 정기 업데이트
안전성 을 고려 하기 위해 서 는 키 유출 이 의 심 될 때 업데이트 가 필요 하 다.업 데 이 트 된 후에 도 원래 의 시 계 는 정상 적 인 방안 을 사용 할 수 있 습 니 다.회색 을 업데이트 하여 master encryption key 를 바 꾸 고 tablespace keys 를 다시 암호 화하 지 않 기 때문에 표 공간 을 다시 암호 화하 거나 복호화 하지 않 습 니 다.업데이트 방법:

--    master key
mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;
Query OK, 0 rows affected (0.00 sec)

--           
mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)
이로써 이 노 DB 테이블 공간의 간단 한 사용 이 시연 됐다.그 중에서 도 많은 세부 사항 이 있 기 때문에 공식 문 서 를 보고 탐색 할 수 있다.https://dev.mysql.com/doc/refman/5.7/en/innodb-data-encryption.html。
총결산
MySQL InnoDB 표 공간 암호 화 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.MySQL InnoDB 표 공간 암호 화 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기