TDE를 사용한 데이터베이스 미러링


10

데이터가 '휴식 중'동안 암호화되어야하므로 몇 개의 데이터베이스를 미러링하고 TDE ( 투명한 데이터 암호화 )를 사용해야합니다.

주 서버와 미러 모두에 TDE를 설정했습니다. 두 데이터베이스의 미러링을 설정할 때 문제가 발생합니다. TDE를 사용하고 있기 때문에 GUI를 통해 미러링을 설정하는 방법을 알지 못하므로 t-sql을 사용하여 작업을 완료해야합니다.

아래는 미러 서버에서 사용한 코드입니다.

--Restore the full backup to the mirrored mdf and ldf
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
RESTORE DATABASE TDE
   FROM disk = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak'
      WITH NORECOVERY,
       REPLACE,
       MOVE 'TDE' TO 'E:\TDE.mdf',
      REPLACE,
      MOVE 'TDE_log' TO 'G:\TDE.ldf'
CLOSE MASTER KEY 
GO

--Restore the log backup to the mirrored db
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
RESTORE LOG TDE
    FROM DISK = '\\SERVERNAME\SQL_Stuff\Backup\TDE_LOG.trn'
    WITH NORECOVERY;
CLOSE MASTER KEY
GO


--Drop/Create Mirroring endpoint on mirror
--DROP ENDPOINT TDE
CREATE ENDPOINT TDE
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7025 )
    FOR DATABASE_MIRRORING (
        ROLE = PARTNER
        );
GO

--Check the endpoints for the mirror
USE MASTER
SELECT * FROM sys.database_mirroring_endpoints
GO

--Set the principal on the mirrored db
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
ALTER DATABASE TDE SET PARTNER = 'TCP://PRINCIPAL.DOMAIN.local:7022'
GO
CLOSE MASTER KEY
GO

아래는 주 서버에서 사용하는 코드입니다.

----------------------Mirroring Section----------------------------------

--Full Backup of Principal
USE TDE
GO
BACKUP DATABASE TDE
TO DISK = '\\SERVERNAME\SQL_Stuff\Backup\TDE_FULL.bak'
    WITH COMPRESSION,
         NAME = 'Full Backup of TDE';
GO

---Log Backup of Principal
USE TDE
GO
BACKUP LOG TDE
TO DISK = '\\SERVERNAME\SQL_Stuff\Backup\TDE_LOG.trn'
    WITH COMPRESSION,
         NAME = 'Log backup of TDE'
GO

--Drop/Create Mirroring endpoint on principal
--DROP ENDPOINT TDE
CREATE ENDPOINT TDE
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 7022 )
    FOR DATABASE_MIRRORING (
        ROLE = PARTNER
        );
GO

--Check the endpoints for the princple
USE master
select * from sys.database_mirroring_endpoints
GO

--Set the mirror db on the principal db
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
ALTER DATABASE TDE SET PARTNER = 'TCP://MIRROR.DOMAIN.local:7025'
CLOSE MASTER KEY
GO

미러링 끝점을 먼저 설정 한 다음 주 끝점을 설정했습니다. 그런 다음 ALTER DATABASE미러에서 를 발행 한 다음 교장에서 발행 하여 결과 오류가 발생합니다.

 Msg 1416, Level 16, State 31, Line 2
Database "TDE" is not configured for database mirroring.

나는 이것에 대해 무엇을 해야할지에 대해 상실하고 있습니다. 미러가 "복원"상태에 있지만 오류가 주 DB에 대해 이야기하고 있다고 확신합니다.

도움을 주셔서 감사합니다.

교장 TDE의 업데이트 코드 :

--Create Master Key in Master Database
USE MASTER
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1Password';
PRINT 'created master key'
go

--Backing up the master key file
USE master;
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password';
BACKUP MASTER KEY TO FILE = '\\SERVERNAME\TDE_Master_Key.key' ENCRYPTION BY PASSWORD = '1Password';
GO

--Create Server Certificate in the Master Database encrypted with master key (created above) which would be used to create USER database encryption key.
USE Master
CREATE CERTIFICATE Cert_For_TDE WITH SUBJECT = 'Master_Cert_for_TDE', EXPIRY_DATE = '3500-Jan-01';
Go

--Backing up the server cert file
--USE master;
BACKUP CERTIFICATE Cert_For_TDE TO FILE = '\\SERVERNAME\TDE_Cert.cer' 
    WITH PRIVATE KEY ( FILE = '\\SERVERNAME\TDE_Cert_Key.key', ENCRYPTION BY PASSWORD = '1Password');
GO

--Create user database key
USE TDE
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE Cert_For_TDE;
GO

--Enabling Transparent Database Encryption for the USER Database
USE master;
GO
ALTER DATABASE TDE SET ENCRYPTION ON
GO

TDE 용 미러 코드 :

--restore the backed up key to the mirror
use master
RESTORE MASTER KEY
    FROM FILE = '\\SERVERNAME\TDE_Master_Key.key'
    DECRYPTION BY PASSWORD = '1Password'
    ENCRYPTION BY PASSWORD = '1Password';
GO

--restore the backed up cert to the mirror
USE Master;
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
CREATE CERTIFICATE Cert_For_TDE    
FROM FILE = '\\SERVERNAME\TDE_Cert.cer' WITH PRIVATE KEY ( FILE = '\\SERVERNAME\TDE_Cert_Key.key', DECRYPTION BY PASSWORD = '1Password');
GO

갱신 2 sys.database_mirroring_endpoints 교장 쇼에 sys.tcp_endpoints과 결합 :

endpoint_id name    principal_id    state_desc  role_desc   connection_auth_desc    certificate_id  encryption_algorithm_desc   port    ip_address
65545   TDE 261 STARTED PARTNER NEGOTIATE   0   RC4 7022    NULL

sys.database_mirroring_endpoints는 미러 쇼에서 sys.tcp_endpoints와 결합되었습니다.

endpoint_id name    principal_id    state_desc  role_desc   connection_auth_desc    certificate_id  encryption_algorithm_desc   port    ip_address
65537   TDE 261 STARTED PARTNER NEGOTIATE   0   RC4 7025    NULL

데이터베이스가 전체 복구 모델입니까? 설정을 수행하는 동안 실행중인 로그 백업 작업이 있습니까? 주체의 마스터 키를 백업하고 TDE의 미러에서 복원 했습니까?
Robert L Davis

네, 두 DB 모두 완전히 복구되었습니다. 백업을 수행하는 동안 작업이 실행되지 않습니다 (4 개의 행이있는 1 개의 테이블 만) 2 초가 걸립니다. 마스터 키를 백업하고 미러로 복원했습니다. 다시 일을 시작하면 내일 그 코드를 게시 할 것입니다.
RateControl

TDE 스크립팅과 일부 dmv를 추가했습니다.
RateControl

답변:


10

댓글이 달린 웹 사이트 를 찾았 습니다.

키와 인증서를 복원 한 직후에 코드를 추가했습니다.

--Mumbojumbo to get mirroring to work
OPEN MASTER KEY DECRYPTION BY PASSWORD = '1Password'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO

그것은 매력처럼 작동합니다. 새 서버의 서비스 마스터 키로 복원 한 마스터 키를 암호화해야한다는 것이 약간 의미가 있습니다. 나는 추측한다.

어깨를 으쓱하다


1
스스로 답변 드리겠습니다 : D
jcolebrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.