레이블이 mysql인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mysql인 게시물을 표시합니다. 모든 게시물 표시

2017년 12월 26일 화요일

Mysql 암호화, 복호화

 
#암호화
INSERT INTO 테이블명 (컬럼1) VALUES (HEX(AES_ENCRYPT('문자열', SHA2('My secret passphrase',512))));

#복호화
SELECT CAST(AES_DECRYPT(UNHEX(컬럼1), SHA2('My secret passphrase',512)) as char) FROM 테이블명;
OR
#복호화
SELECT CONVERT(AES_DECRYPT(UNHEX(컬럼1), SHA2('My secret passphrase',512)) USING utf8) FROM 테이블명;

 

CAST나 CONVERT으로 형변환 하는 부분 때문에 한참 해맸다.
대부분의 블로그가 형변환을 안 써 놨다.(심지어 공식 사이트 에서도...)

암복호화 함수의 리턴값은 BINARY 이기 때문에 HEX를 사용하지 않으면 필드 타입을 BINARY 저장이 가능한 타입으로 지정해야 된다. 공식문서는 BLOB을 추천한다고...

문제는 BINARY타입으로 지정시 일반 문자열 저장이 안되는 문제가 있기 때문에 필드타입을 VARCAHR로 사용하고 HEX를 사용하여 저장이 가능 하도록 한다.

 

MySQL 5.6이상부터 변경 가능.
암호화 모드 확인
select @@block_encryption_mode

암호화 모드 변경
SET block_encryption_mode = 'aes-256-cbc';#기본값 aes-128-ecb

암호화 모도는 처음부터 확인. 중간에 바뀌면 골치 아파진다.

2014년 8월 19일 화요일

pid 값으로 강제 종료 스크립트.

service mysqld stop으로 mysql이 죽지를 않는다.

pkill mysqld 도 안 먹는다.

killall mysqld 도 안 먹는 다.

kill -9 pid 로는 먹는다.

근데 전부 다 죽여줘야 한다.

스크립트를 찾았다. 역시 있었다.
#!/bin/bash

[ -z "$1" ] && echo "Usage : Input Process .......... Please [scriptFileName ProcessName]" && exit

process_id=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

if [ -z "$process_id" ];then
echo "+-------------------------------------------------------------+"
echo "Not Found Process (입력하신 프로세스를 찾지 못했습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
exit
else
process_id_number=`ps -ax | grep "$1" | grep -vw "grep" | grep -vw $$ | awk '{print $1}'`

for i in ${process_id_number} ;do
kill -9 $i &> /dev/null
printf "%-40s %-s\n" "$i PID Killed" "$(echo -ne "[ \\033[01;32m OK \\033[0m ]")"
done
sleep 2;
echo "+-------------------------------------------------------------+"
echo "Process Kill OK (프로세스가 강제적으로 종료 되었습니다.) ...... Done"
echo "+-------------------------------------------------------------+"
fi

출처