yoursyun
ms-sql 암호화 저장 본문
TEST 해본 결과 2000 SP4 동작 , 2005 동작이 처리 되었다.
CREATE TABLE Tpassword
(
passwd varbinary(256)
);
INSERT INTO Tpassword values(pwdencrypt('1234'));
SELECT pwdcompare('1111', passwd) FROM Tpassword
SELECT * FROM Tpassword
킁 위 방법은 복호화해서 원본 데이터를 보는 방법을 못찾았다. 쳇
=============================================================================================
create database data_encryption
go
use data_encryption
go
create table dbo.dataSecure
(
id int identity(1,1),
data_secure varchar(20),
data_encryption varchar(100)
)
go
--데이터베이스 마스터 키 만들기
create master key encryption by password = 'pass'
go
--마스터키로부터 비대칭 키 만들기
create asymmetric key asym_Encryption_Test with algorithm = rsa_1024
go
--데이터 암호화에 사용되는 대칭 키 만들기
create symmetric key sym_Encryption_Test with algorithm = des
encryption by asymmetric key asym_Encryption_Test
go
--대칭 키 열기
open symmetric key sym_Encryption_Test decryption by asymmetric key asym_Encryption_Test
--대칭 키의 GUID 를 열고 데이터를 입력
declare @guid uniqueidentifier
set @guid = (select key_guid from sys.symmetric_keys where name = 'sym_Encryption_Test')
insert into dbo.dataSecure (data_secure, data_encryption) values ('중요한기밀내용', encryptbykey(@guid, '중요한기밀내용'))
go
--암호화된 데이터 보기
select id, data_secure, data_encryption from dbo.dataSecure
--복호화 테스트
select id, data_secure, cast(decryptbykey(data_encryption) as varchar(100)) from dataSecure
--테스트 개체 삭제
drop symmetric key sym_Encryption_Test
drop asymmetric key asym_Encryption_Test
go
use master
go
drop database data_encryption
go
================================================================================================
이전 버전(SQL Server 2000)에서는 데이터를 암호화(Encrypt) 하고 암호를 해독(Decrypt)하는데 있어서,
자체 개발이나 Third Party Vender의 솔루션을 이용해야 했습니다.
이런 문제점을 해결하기 위해 2005에서는 SQL Server 자체적으로 지원하고 있습니다.
1. EncryptByKey 또는 DecryptByKey
- 대칭 키를 사용하여 데이터를 암호화 또는 복호화 합니다.
대칭 암호화 및 암호 해독은 비교적 속도가 빠르며 대량의 데이터 작업 시 적합합니다.
2. EncryptByAsymKey 또는 DecryptByAsymKey
- 비대칭 키를 사용하여 데이터를 암호화 또는 복호화 합니다.
대칭 키로 암호화/복호화를 수행하는 것 보다 비용이 훨씬 많이 듭니다.
큰 데이터의 집합으로 작업할 경우에는 비대칭 키를 사용하지 않는 것이 좋습니다.
3. EncryptByCert 또는 DecryptByCert
- 인증서의 공개 키를 사용하여 데이터를 암호화 또는 복호화 합니다.
대칭 키로 암호화/복호화를 수행하는 것 보다 비용이 훨씬 많이 듭니다.
큰 데이터의 집합으로 작업할 경우에는 비대칭 키를 사용하지 않는 것이 좋습니다.
4. EncryptByPassPhrase 또는 DecryptByPassPhrase
- 전달 구(대칭 키)로 데이터를 암호화 또는 복호화 합니다.
전달 구에는 상대적으로 긴 문자열 대신 의미 있는 구나 문장이 사용되므로 기억하기가 쉽습니다.
※ 테스트해 보면서 알게 된 사실 하나는…
실제로는 EncryptByAsymKey라는 명령어로 사용되는 것을, 도움말 또는 핑크색으로 표현되는 예약어 목록에
EncryptByAsmKey로 잘못 기재되어 있다는 사실입니다. DecryptByAsymKey도 마찬가지였습니다.
일종의 버그로 판단되는데요. SP2에서도 수정이 안되었는데, 과연 다음 서비스팩에서는 수정이 될까요? 의문이군요…