2016-05-04

MSSQL 필드(컬럼) 암호화

MS-SQL에서 내부적으로 지원하는 문서화되지 않은 문자열 함수인 PWDENCRYPT와 PWDCOMPARE를 통해 암호화 기능을 구현할수 있다.
<사용예제>
' 테이블을 생성한다, 암호화할 컬럼은 VARBINARY 타입으로 한다.
CREATE TABLE MEMBER
(
  UserId VARCHAR(25),
  UserPwd VARBINARY(100)
)
' 데이터를 입력한다. 암호화할 컬럼은 PWDENCRYPT메소드를 이용해서 넣는다.
INSERT INTO MEMBER (UserId, UserPwd)
VALUES ('ssey', PWDENCRYPT('seyoung')) 
' 해당아이디를 가진 회원의 암호화된 비밀번호 컬럼과 입력한 문자열 비밀번호를
PWDCOMPARE(입력문자열, 컬럼명) 메소드를 이용해 비교한다.
' 둘이 같으면 (true), 틀리면 0 (false)를 리턴하게 된다.
' 그리고 원문이나 암호문 둘 중 하나가 NULL 이면 NULL을 리턴하게 된다.
SELECT PWDCOMPARE('SEYOUNG', UserPwd)
FROM MEMBER WHERE UserId='ssey'  ' 결과 : 1
결과를 살펴보면 대소문자는 구분하지 않음을 알 수 있다. 암호문의 경우 위에서 살펴본대로 대소문자를 분명 다르게 비교하였으나, PWDCOMPARE 함수에서는 대소문자를 무시하였다.
또한, 실행 결과를 보면 형태는 원문의 길이에 상관없이 30~35자 사이의 거의 일정한 길이의 암호문을 출력하는 것을 볼 수 있다.  테스트 결과 원문의 길이가 varchar 기준으로 128자를 넘었을 경우 에러를 발생 하였다.