무료 DB인 MariaDB를 사용함에 있어서
암복호화를 하는 것이 필요했습니다.
다음 예제는 임의의 Table 생성 후
SHA2 512 방식으로 암복호화 하는 예제를 첨부하였습니다.
다만,
- Function에서 길이나 별도의 예외 상황에 대한 추가 처리는 더 필요해 보입니다.
- key_value는 사이트 특성에 맞춰 수행이 필요합니다.
function 에서 암호화 키 값이 보일수 있기 때문에 보안 목적과 잘 고려하여 설정이 필요합니다.
-- 암호화 할 컬럼은 Byte 값을 반환하기 때문에 blob 사용
CREATE TABLE private_data ( NAME VARCHAR(21), phone BLOB, address BLOB ); |
-- 데이터 입력
insert into private_data values( '김대식', AES_ENCRYPT('010-1234-1234',SHA2('key_value',512)), AES_ENCRYPT('서울시 송파구',SHA2('key_value',512)) ); |
-- 암호화 컬럼 데이터 조회
select name, CONVERT(AES_DECRYPT(phone,SHA2('key_value',512)) using utf8) phone, CONVERT(AES_DECRYPT(address,SHA2('key_value',512)) using utf8) address from private_data; |
-- 함수 사용 데이터 조회
SELECT test.decfn(test.encfn('010-1234-1234')) FROM dual; SELECT NAME , test.decfn(phone) AS phone , test.decfn(address) AS address FROM private_data; |
encfn 함수
DELIMITER $$ DROP FUNCTION IF EXISTS test.encfn; CREATE FUNCTION test.encfn(encvalue VARCHAR(1000)) RETURNS blob BEGIN DECLARE result BLOB DEFAULT ''; select AES_ENCRYPT(encvalue,SHA2('key_value',512)) INTO result FROM dual; RETURN result; END $$ DELIMITER ; |
decfn 함수
DELIMITER $$ DROP FUNCTION IF EXISTS test.decfn; CREATE FUNCTION test.decfn(decvalue blob) RETURNS VARCHAR(1000) BEGIN DECLARE result VARCHAR(1000) DEFAULT ''; select CONVERT(AES_DECRYPT(decvalue,SHA2('key_value',512)) using UTF8) INTO result FROM dual; RETURN result; END $$ DELIMITER ; |
계정 생성 및 실행 권한 부여
(해당 쉘로 접속하여 수행)
CREATE USER 'testuser'@'%' IDENTIFIED BY 'testuser';
GRANT SELECT ON test.* TO 'testuser'@'%';
GRANT EXECUTE ON FUNCTION test.encfn TO testuser@'%';
GRANT EXECUTE ON FUNCTION test.decfn TO testuser@'%';
(만약 HediSQL에서 아래 에러가 발생하면)
원격 root에 대한(%) 권한 부족으로
해당 mariaDB에 접속하여 with grant option을 설정해 주면 됩니다.
SQL> grant all on *.* to 'root'@'%' identified by 'password' with grant option;
참고 사이트
https://m.blog.naver.com/jjjhyeok/220006204633
https://hsunryou.blog.me/221543591162
https://mariadb.com/kb/en/library/sha2/
https://eotlr0806.blog.me/221338753828
'Database > MYSQL' 카테고리의 다른 글
MariaDB 테이블 백업 및 복구 (0) | 2019.11.01 |
---|---|
MariaDB 우편번호 Import 하기 (0) | 2019.11.01 |
Mysql & MariaDB 튜닝 쉘 (0) | 2019.08.14 |
MySQL 백업용 쉘스크립트입니다. (0) | 2010.01.18 |
무료 접속 툴 (Free Tool) (0) | 2009.03.06 |