서버를 설계하면서 로그인 및 기타 패스워드를 필요로 하는 경우
Mysql에 패스워드를 저장해야 하는데 이때 그냥 저장할 수도 있지만
이럴 경우 보안에 너무도 취약하고 비밀번호 노출의 위험이 있습니다.
Mysql에서는 이러한 패스워드를 암호화하여 저장하는 방식을 몇 가지 제공합니다.
먼저 사람들이 가장 많이 알고있는 방법으로는 password 함수를 사용하는 것입니다.
password 함수
password 함수는 단순하게 비밀번호를 인자로 넘기기만 하면 자동적으로
mysql에서 암호화 코드로 변경하여 저장해 주는 기능입니다.
PASSWORD(str)
사용하기 간단하지만 그만큼 많이 알려졌고 보안에 취약하다는 이유로
요즘 들어서는 많이 사용하지 않는 추세입니다.
그나마 사용한다고 하면 신규로 설계하는 서버가 아니라 기존에 설계된
Database를 이어서 운영하는 경우에 많이 볼 수 있습니다.
SHA2
SHA2는 대표적인 단방향 암호화로 해시 함수를 이용합니다.
해시 함수는 임의의 평문 데이터를 고정된 길이의 데이터로 반환하며
동일한 값이 입력되면 동일한 출력 값을 보장합니다.
SHA2(str, hash_length)
str부분에 암호화할 문자열을 입력하고 hash_length에는 해시 함수 타입을 넣어줍니다.
해시함수 타입은 SHA-224, 256, 384, 512를 사용할 수 있습니다.
AES
AES는 대표적인 양방향 암호화 방식이며 대칭키 알고리즘의 암호화 기능을 사용합니다.
단방향과 달리 양방향은 평문을 암호문으로 바꾼 뒤에 다시 암호문을 암호화 키를 사용해
평문으로 바꿀 수가 있습니다.
AES_ENCRYPT(str, key_str)
암호화를 위한 기본적인 포맷으로 key_str은 str을 암호화할 때 사용될 암호화 키이며
암호화 키 사용 시에도 SHA2를 이용해서 암호화하는 것이 좋습니다.
AES_DECRYPT(str, key_str)
복호화를 위한 기본적인 포맷으로 key_str은 암호문을 풀기 위한 암호화 키입니다.
기본적인 예제를 통해 사용방법을 알아보겠습니다.
AES_ENCRYPT 함수만 사용하게 되면 문자가 깨지기 때문에 문자셋을 HEX 함수를 통해 한번 변환합니다.
HEX 함수를 이용하게 되면 16진수 값의 문자가 반환됩니다.
INSERT INTO TEST(PASSWORD) VALUES(HEX(AES_ENCRYPT('1234aaa', SHA2('abcabc', 256)));
'서버 > Mysql' 카테고리의 다른 글
Mysql Slow Query log (부하 관리) (3) | 2022.05.11 |
---|---|
Insert ignore 중복 레코드 관리 (5) | 2022.05.10 |
SQL 두 테이블 비교하여 한쪽 테이블 없는 값 추출 (8) | 2022.02.17 |
SQL 일정 기간 이내 테이블 조회 (10) | 2022.02.16 |
Mysql 사용자 생성 및 권한 설정 (6) | 2022.02.11 |
댓글