반응형

본 강좌에서 다루는 내용은 Microsoft SQL Server 2008 CTP, February 2008 을 기준으로 한 것이므로 정식 버전이 출시된 경우 실제 내용과 본 강좌의 내용이 서로 다를 수 있음을 유의하시기 바랍니다.

이번 강좌에서는 SQL Server 2008에서 새로 선보인 데이터베이스 암호화(Database Encryption)에 대해 살펴보겠습니다. SQL Server 2005에서는 중요 데이터를 암호화 할 수 있는 방법이 제공되고 있습니다. 하지만 데이터를 암호화하는 함수를 INSERT문, UPDATE문에 사용해야 하고, 암호화된 데이터를 읽기 위해서는 복호화하는 함수를 SELECT문에 사용해야 합니다. 이러한 이유로 데이터를 액세스하는 응용 프로그램 수정이 불가피합니다.

하지만 SQL Server 2008의 암호화는 데이터를 액세스하는 응용 프로그램 수정이 필요가 없습니다. 데이터 암호화와 복호화를 SQL Server가 자동으로 수행해주기 때문입니다. 이런 이유로 SQL Server 2008의 암호화 방법을 투명한 데이터 암호화(Transparant Data Encryption)라고 부릅니다.

데이터베이스 암호화를 설정하기 위해서는 다음과 같은 네 단계의 작업이 수행되어야 합니다.

① 마스터 키 만들기
② 마스터키로 보호되는 인증서 만들기
③ 인증서를 사용해 DEK(Database Encryption Key:데이터베이스 암호화 키) 만들기
④ 암호화를 사용하도록 데이터베이스 설정

위 네 단계의 작업 중에서 ①과 ② 단계는 master 데이터베이스에서 수행해야 하며, ③과 ④ 단계는 해당 사용자 데이터베이스에서 수행해야 합니다. ③과 ④ 단계를 한번에 수행 할 수 있는 사용자 인터페이스가 제공됩니다.

1. 마스터 키 만들기

먼저 아래 스크립트와 같이 master 데이터베이스에서 마스터 키를 만듭니다. 이 마스터 키는 다음 단계에서 인증서를 만들 때 암호화를 위해 사용됩니다.

USE master
GO

CREATE MASTER KEY
    ENCRYPTION BY PASSWORD =
'Pa$$w0rd'
GO

2. 인증서 만들기

아래 스크립트와 같이 master 데이터베이스에서 인증서를 만듭니다. 이 인증서는 다음 단계에서 데이터베이스 암호화 키를 만드는데 사용됩니다.

USE master
GO

CREATE CERTIFICATE ServerCertificate
    WITH SUBJECT = 'Server level certificate'
GO

3. 데이터베이스 안호화 키 만들기

아래 스크립트와 같이 암호화 하고자 하는 데이터베이스(본 강좌의 경우 Adventureworks) 에서 데이터베이스 암호화 키를 만듭니다. 이때 앞의 단계에서 만든 인증서를 사용하게 됩니다.

USE AdventureWorks
GO

CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE ServerCertificate
GO

4. 데이터베이스 안호화 설정

아래 스크립트와 같이 해당 데이터베이스 속성에서 암호화 여부를 ALTER DATABASE 문을 사용해 설정 합니다. 데이터베이스 암호화 키가 존재하는 데이터베이스만 암호화 설정을 할 수 있습니다.

USE master
GO

ALTER DATABASE AdventureWorks
    SET ENCRYPTION ON
GO

위 3 단계와 4단계는 [화면1]과 같이 해당 데이터베이스의 단축 메뉴에서 데이터베이스 암호화 관리 메뉴를 사용하면 쉽게 할 수 있습니다.


[화면1]

[화면2]는 데이터베이스 암호화 관리 창을 보여줍니다. 암호화 알고리즘서버 인증서를 선택하고 데이터베이스 암호화 설정 부분을 체크하면 됩니다.


[화면2]

5. 데이터베이스 암호화 설정 여부 확인

데이터베이스 암호화 설정 여부는 해당 데이터베이스 속성 창에서 옵션 부분을 통해 확인할 수 있습니다. [화면3]는 암호화 사용 부분이 True로 설정되어 있는 모습을 보여줍니다. 이 값을 변경해 암호화를 취소 할 수 있습니다.


[화면3]

6. 다른 서버에서 복원 불가

일반적으로 데이터베이스 백업 파일은 다른 서버에서 쉽게 복원이 됩니다. 만일 중요한 데이터베이스 백업이 외부로 유출되었다고 가정한다면 이 유출된 백업 파일은 손쉽게 외부의 서버에서 복원되어 중요 정보가 유출되는 결과를 가져옵니다. 하지만 암호화된 데이터베이스의 백업 파일은 다른 서버에서 복원될 수 없습니다. 이를 통해 중요 데이터에 대한 심층 보안이 가능해집니다. 만일 다른 서버에서 복원이 시도되면 [화면4]와 같은 오류가 발생합니다.


[화면4]

7. 다른 서버에서 데이터베이스 파일 연결 불가

암호화된 데이터베이스 파일을 다른 서버에 복사해 연결하려고 하면 [화면5]와 같은 오류가 발생하면서 연결을 알 수 없게 됩니다.


[화면5]

8. 고려사항

암호화된 데이터베이스의 데이터 액세스는 SQL Server에 의해 자동으로 암호화 및 복호화가 수행됩니다. 이로인해 암호화 되지 않은 데이터베이스와 비교해 더 많은 CPU가 사용 될 것이며 암호화 및 복화화 단계가 수행됨으로해서 성능 역시 저하 될 수 있습니다. 그러므로 데이터베이스 암호화 정책 수립 시 이에 대한 충분한 고려가 필요합니다. 또한 암호화된 데이터베이스를 앙호화 하기 위해 데이터베이스 암호화 키를 만들때 사용된 인증서가 제대로 관리되지 않으면 정작 필요한 경우 데이터베이스 복원이 불가능할 수 있습니다. 데이터베이스 백업 정책과 함께 인증서에 대한 백업 정책도 같이 수립되어야 합니다.

맺음말

SQL Server 2008에 추가된 데이터베이스 암호화 기능은 중요한 데이터를 한층 더 안전하게 보호 할 수 있는 방법이라 생각됩니다. 하지만 이로 인해 발생하게 되는 CPU의 오버헤드와 성능 저하 가능성에 대한 부분이 해당 업무에 영향을 많이 주게 된다면 신중히 선택해야 하는 기능일 것입니다. 또한 서버 이관 및 확장 등을 위해 정책적으로 데이터베이스를 다른 서버로 옮기고자 하는 경우 다소 번거로운 과정이 필요할 수 있습니다. 이 부분도 유념하고 있어야 할 부분이라 생각합니다. 데이터베이스 암호화 방법은 데이터베이스를 통째로 암호화하는 기능입니다. 일부 데이터만을 암호화하고자 한다면 이전 버전부터 제공되는 암호화 함수를 이용해야 할 것입니다.

 

반응형

+ Recent posts