MS SQL2013.07.04 15:19

 

[내용]

 

SQL Server 데이터베이스 암호화(TDE) DB 다른 서버에서 복구하는 과정 일부입니다. 암호화된 데이터베이스를 다른 서버에서 복구를 하려면, 암호화를 하면서 사용했던 인증서를 대상 서버에 복구 하는 과정이 선행되어야 합니다. , 발생한 Issue 관련된 내용입니다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012

SQL 계정으로 작업

 

 

[장애 발생 시나리오]

 

TDE Enable 시킨 데이터베이스와 서버의 인증서를 백업하고, 대상 서버에서 인증서를 복구하는 도중에 아래와 같은 에러가 발생 하였습니다.

 

오류메시지 15208, 수준 16, 상태 6, 1

인증서, 비대칭 또는 개인 파일이 잘못되었거나 없거나 파일에 대한 사용 권한이 없습니다.

 

 

[ACTION]

 

최초(원본) 파일의 권한을 체크합니다.

 

 

정상적으로 복원이 되는 인증서 파일과 비교해 보았더니, 원본 파일(왼쪽)에는 User 권한이 없고, 정상 동작 파일에는 Users 권한이 있었습니다.

 

 

그래서 인증서 파일과 개인키 파일 모두에 Users 추가하였습니다.

 

 

Users(서비스 계정) 추가 , 아래와 같이 백업이 성공하였습니다.

 

 

[원인]

대상 서버의 서비스 계정(Users 그룹에 포함된) 인증서 파일에 접근 사용 권한이 없기 때문입니다.

, 데이터베이스에서 인증서 파일과 같이 보안관련 파일을 생성할 때 인증된 최소한의 로컬 계정에 대해서만 권한을 줍니다.

일반적인 백업 파일의 경우에는 아래와 같습니다.

 

 

그러므로 복원을 하려면 인증서 파일에 액세스 할 수 있는 계정을 추가해 줘야 정상적인 복구가 가능합니다.(해당 서버의 서비스 계정)

 

 

[참고]

 

http://msdn.microsoft.com/ko-kr/library/ff773063(v=sql.105).aspx

 

 

 

신고
Posted by TM ~ing
MS SQL2013.06.26 14:24

 

[내용]

 

암호화된 데이터베이스의 백업 파일도 데이터베이스 암호화 키로 암호화 됩니다. 이런 백업 파일을 복원하려면 데이터베이스 암호화 키와 관련된 인증서가 있어야 합니다. 암호화된 데이터베이스의 인증서 백업 부터 데이터베이스 복원하는 방법을 알아봅시다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012

 

 

[ACTION]

아래의 스크립트를 암호화 데이터베이스 있는 서버에서 실행합니다.

---------------------------------------------------------------------------

-- 데이터베이스 백업

BACKUP DATABASE [PracticeTDE]

TO DISK = 'C:\Backup\PracticeTDE'

WITH INIT

GO

 

 

-- 인증서 백업

BACKUP CERTIFICATE TDECertificate

TO FILE = 'C:\Backup\TDECertificate.cer'

WITH PRIVATE KEY (FILE = 'C:\Backup\TDECertificate.pvk' ,

ENCRYPTION BY PASSWORD = 'Pa$$w0rd')

GO

---------------------------------------------------------------------------

 

아래의 스크립트를 복원 시킬 서버에서 실행합니다.

---------------------------------------------------------------------------

USE Master

GO

 

-- 마스터 생성

CREATE MASTER KEY ENCRYPTION

BY PASSWORD = 'Pa$$w0rd'

GO

 

-- 원본 서버에서 가져온 인증서 복원

CREATE CERTIFICATE TDECertificate

FROM FILE = 'C:\Backup\TDECertificate.cer'

WITH PRIVATE KEY (FILE = 'C:\Backup\TDECertificate.pvk',

DECRYPTION BY PASSWORD = 'Pa$$w0rd')

GO

 

-- 백업 파일 복원

USE master

GO

 

RESTORE DATABASE PracticeTDE

FROM DISK = 'C:\Backup\PracticeTDE.bak'

WITH MOVE 'PracticeTDE' TO 'C:\Data\PracticeTDE.mdf', 

 MOVE 'PracticeTDE_log' TO 'C:\Data\PracticeTDE_log.ldf'

GO

 

--정상적 복구 확인

SELECT * FROM [dbo].[EmpTest]

GO

 

 

 

[참고]

 

http://msdn.microsoft.com/ko-kr/library/bb934049.aspx

http://msdn.microsoft.com/ko-kr/library/ff773063.aspx

 

 

 

 

신고
Posted by TM ~ing
MS SQL2013.06.26 09:49

 

 

[내용]

 

TDE 개별 테이블의 열에 대한 암호화가 아닌 데이터베이스 전체를 암호화하는 데이터베이스 수준의 암호화 방법입니다. 이런 방법으로 암호화된 데이터베이스는 마스터키가 존재하지 않는 다른 서버에 연결 복원 없습니다. 그러면 이런 TDE 설정하는 방법에 대해 알아봅시다.

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012

 

[개요]

아래와 같은 순서로 진행합니다.

 

 

번째와 번째 단계는 master 데이터베이스에서 수행합니다.

번째와 번째 단계는 암호화할 대상 데이터베이스에서 수행 해야합니다.

 

[ACTION]

아래의 스크립트를 실행합니다.

---------------------------------------------------------------------------

-- 암호화할 데이터베이스 만들기

 

USE master

GO

 

-- 기존 데이터베이스 있으면 제거

IF DB_ID('PracticeTDE') IS NOT NULL

BEGIN

    ALTER DATABASE PracticeTDE

SET SINGLE_USER

WITH ROLLBACK IMMEDIATE

DROP DATABASE PracticeTDE

END

GO

 

-- 데이터베이스 만들기

CREATE DATABASE PracticeTDE

GO

 

USE PracticeTDE

GO

 

-- 테이블 만들기(Adventureworks2012 설치되어 있어야 )

SELECT BusinessEntityID, LoginID, JobTitle, BirthDate, HireDate, VacationHours

INTO dbo.EmpTest

FROM AdventureWorks2012.HumanResources.Employee

GO

---------------------------------------------------------------------------

 

1. Master Key 만들기

인증서를 보호하는데 사용하는 Master Key 생성합니다.

---------------------------------------------------------------------------

USE master

GO

 

CREATE MASTER KEY

ENCRYPTION BY PASSWORD = 'Pa$$w0rd' -- 복잡한 암호 지정

GO

---------------------------------------------------------------------------

 

2. 인증서 만들기

DEK(데이터베이스 암호화 ) 보호하는데 사용되는 인증서를 만듭니다.

---------------------------------------------------------------------------

USE Master

GO

 

CREATE CERTIFICATE TDECertificate

WITH SUBJECT = 'Server level certificate for TDE'

GO

---------------------------------------------------------------------------

 

3. DEK(데이터베이스 암호화 ) 만들기

인증서로 보호되는 DEK 만듭니다.

---------------------------------------------------------------------------

USE PracticeTDE

GO

 

CREATE DATABASE ENCRYPTION KEY

WITH ALGORITHM = AES_128

ENCRYPTION BY SERVER CERTIFICATE TDECertificate

GO

---------------------------------------------------------------------------

 

4. 암호화 설정

암호화할 데이터베이스에 암호화 설정을 합니다.

---------------------------------------------------------------------------

ALTER DATABASE PracticeTDE

SET ENCRYPTION ON

GO

---------------------------------------------------------------------------

 

 

[참고]

 

http://msdn.microsoft.com/ko-kr/library/bb934049.aspx

http://msdn.microsoft.com/ko-kr/library/ff773063.aspx

 

 

 

 

 

 

신고
Posted by TM ~ing

티스토리 툴바