반응형

무료 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

 

[mysql] MYSQL Function 함수 생성, 조회, 실행

아래 샘플코드는 코드조회용 FUNCTION생성 스크립트 샘플 DELIMITER $$ DROP...

blog.naver.com

https://hsunryou.blog.me/221543591162

 

MariaDB(10.1.23)의 AES 암호화 Key 길이는 ?

우선 암호화 테스트를 위한 테이블을 아래와 같이 구성해 보았습니다.# AES 암호화 키가 128Bit보다 작...

blog.naver.com

 

https://mariadb.com/kb/en/library/sha2/

 

SHA2

Calculates an SHA-2 checksum.

mariadb.com

 

https://eotlr0806.blog.me/221338753828

 

Mariadb 암호화 복호화

어플리케이션을 서비스 하다보면 개인정보를 다뤄야 하는 민감한 상황들이 옵니다... 이때 대부분 많이 사...

blog.naver.com

 

 

반응형

'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

+ Recent posts