2009년 04월 21일
MSSQL 에서 암호화 하기 1, 2
1. (MySQL 에서 password() 처럼 쓸수 있는 방법
물론 복호화는 불가능하다.
/* 암호화 함수 */
SELECT PwdEncrypt('TESTDATA')
-----------------------------------
-- 결과 : 0x0100B10AD5EF78506BAB878F63BE525BBF501A409E2AA4DBFCEC
/* 확인 함수 */
-- SQL :
SELECT PwdCompare('TESTDATA', PwdEncrypt('TESTDATA'))
------------------------------------------------------------
-- 결과 : 1
-- SQL :
SELECT PwdCompare('TESTDATA', PwdEncrypt('TESTDATA1'))
------------------------------------------------------------
-- 결과 : 0
2. 마스터 키 생성 -> 비대칭 키 생성 -> 대칭 키 생성
create master key encryption by password='패스워드'
create asymmetric key asym_encryption_test with algorithm = rsa_1024
create symmetric key sym_encryption_test with algorithm = des encryption by asymmetric key asym_encryption_test
일반적으로 위와 같이 생성한다...
마스터키를 만들고, 비대칭키를 RSA_1024 알고리즘으로 생성하고,
대칭키를 앞에 만들어 둔 비대칭키를 암호로 하여 DES 알고리즘으로 로 생성한다.
그러나... 또라이 사장을 둔 가난한 회사의 불쌍한 개발자에게는 웹 호스팅 등등 여러가지 상황을 염려에 두어야 하므로...
DB 백업이나, 기타 등등 문제가 생겼을 경우, 복원해도 기존 암호를 복호화를 할 수 있는 키를 생성 할 수 없다.
모든 키를 패스워드로 생성하자.
create master key encryption by password='패스워드'
create asymmetric key asym_encryption_test with algorithm = rsa_1024 ENCRYPTION BY PASSWORD = '패스워드'
create symmetric key sym_encryption_test with algorithm = des encryption by password = '패스워드'
하다보니 드는 생각...
대칭키를 패스워드로 생성하면... 비대칭키는 생성 안해도 되는거 아닌가???
모르겠다.. 귀찮다...
키를 생성했으면 열자
open symmetric key sym_encryption_test
decryption by asymmetric key asym_encryption_test
이것은 세션동안 유지 된다.
처음 방법대로 했으면 이렇게 열고...
패스워드를 썼으니
open symmetric key sym_encryption_test
decryption by password='패스워드'
암호화 :
EncryptByKey(Key_GUID('sym_encryption_test'), '암호화 할 문자열');
복호화 :
convert(varchar, DecryptByKey('암호화된 문자열))
생성되는 암호화 문자열이 들어갈 컬럼은 varbinary(128) 정도로 해 준다.
select *, gayalabor.dec(encrypted) from gayalabor.temp

두대의 서버에서 백업 - 복원 후 패스워드로 키를 생성해 준 후 열어 보았다.
동일한 해쉬(?)값을 갖는 키가 생성되었다.
퇴근하자!
# by | 2009/04/21 09:21 | ASPX MSSQL VS | 트랙백 | 덧글(0)















☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]