1. 데이터 암호화 방식
1) 단방향 암호화
MD5, SHA1 같은 방법으로 암호화(Encrypt) 후 원래대로 복호화(Decrypt)가 필요 없는 경우
예) 패스워드, 주민번호(복호화 불필요시)등
2) 쌍방향 암호화
DES, DES3, ENC, COMPRESS 같은 방법으로 암호화(Encrypt) 후 원래대로 복호화(Decrypt)가 필요한 경우
예) 이름, 아이디, 주민번호(나이계산, 생일), 메일주소, 주소, 닉네임, 나이, 생일
2. MySQL에서 지원하는 암호화 함수
1) 쌍방향 암호화 (암호화, 복호화) 지원
▶ AES_ENCRYPT, AES_DECRYPT
drop table member_info; insert into member_info values('themade', hex(aes_encrypt('themade','aaaa')), 32, 1) select * from member_info; select AES_DECRYPT(UNHEX(passwd), 'aaaa') as passwd |
▶ DES_ENCRYPT, DES_DECRYPT (해당 암호화는 mysql 설정 시, --with-ssl을 추가해 줘야 실행할 수 있다.)
drop table member_info2; insert into member_info2 values('themade', DES_ENCRYPT('themade','aaaa'), 32, 1) select * from member_info2; select DES_DECRYPT(passwd, 'aaaa') as passwd from member_info2; |
▶ DECODE, ENCODE
drop table member_info3; insert into member_info3 values('themade', ENCODE('themade','aaaa'), 32, 1) select DECODE(passwd, 'aaaa') as passwd from member_info3; |
▶ COMPRESS, UNCOMPRESS
2) 단방향 암호화 지원
▶ MD5, SHA
drop table member_info; insert into member_info values('themade', md5('themade'), 32, 1) select * from member_info; |
▶ password, old_password
MySQL 내의 함수로 password함수는 5.1부터 나온 함수이고, 5.1에서는 이전 password 함수를 old_password라고 한다.
4.0에서 사용하던 password함수가 5.1까지는 old_password로 변경이 되었는데 5.5부터는 old_password조차 지원하지
않는다. 해당 mysql 테이블 권한을 주었다면 상관없지만 해당 함수로 서비스에서 사용하는 패스워드로 적용하지 않는 것이
좋다.
drop table member_info; insert into member_info values('themade', password('themade'), 32, 1) select * from member_info; |
3. 암호화 과정에서의 주의사항
▶ MySQL 테이블 암호화는 암호화하는 과정에서 CPU도 많은 부분 사용하기 때문에 기존에 있는 컬럼을 암호화시 서버에 부하가
되는지 먼저 테스트해보아야 한다.
▶ 암호화의 데이터 길이를 고려하여 컬럼 길이와 타입을 변경해야 한다.
잘못하면 암호화 시킨 데이터가 입력이 안되는 경우가 발생할 수도 있다.
▶ TEST 서버에서 충분한 테스트를 진행해야 한다.
4. 문제 발생시 빠른 테이블 전환
// 데이터 백업 // 테이블명 변경 |
[출처] MySQL 테이블 데이터 암호화|작성자 theswice
'연구개발 > MYSQL' 카테고리의 다른 글
InnoDB 테이블 손상(깨어진)시 강제 복구 (0) | 2014.12.08 |
---|---|
mysql> show status (0) | 2014.12.03 |
일렬로 된 데이터를 5줄로 정렬하여 데이터를 조회하는 방법 (0) | 2014.11.27 |
컬럼이 5줄인 데이터를 한줄로 보여지게 하는 방법 (0) | 2014.11.27 |
io_capacity와 checkpoint age <MySQL 5.6> (0) | 2014.11.27 |