Datenbankspiegelung mit TDE

10

Ich muss einige Datenbanken spiegeln und auch eine transparente Datenverschlüsselung (TDE) verwenden, da unsere Daten im Ruhezustand verschlüsselt werden müssen.

Ich habe TDE sowohl auf dem Principal als auch auf dem Spiegel eingerichtet. Das Problem, das ich habe, kommt ins Spiel, wenn ich die Spiegelung der beiden Datenbanken einrichte. Da ich TDE verwende, kenne ich keine Möglichkeit, die Spiegelung über die GUI einzurichten. Daher bin ich gezwungen, t-sql zu verwenden, um die Aufgabe zu erledigen.

Unten ist der Code, den ich auf dem gespiegelten Server verwendet habe

--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

Unten ist der Code, den ich auf dem Hauptserver verwende.

----------------------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

Ich richte zuerst den Spiegelungsendpunkt und dann den Hauptendpunkt ein. Ich gebe dann das ALTER DATABASEauf dem Spiegel aus, dann auf dem Prinzipal, wo ich den resultierenden Fehler erhalte:

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

Ich weiß nicht, was ich dagegen tun soll. Der Spiegel befindet sich im Status "Wiederherstellen", aber ich bin sicher, dass es sich bei dem Fehler um die Hauptdatenbank handelt.

Vielen Dank für jede Hilfe, die Sie geben können!

Update- Code für die Haupt-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

Code auf Spiegel für 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

Update2 sys.database_mirroring_endpoints zusammen mit sys.tcp_endpoints in Principal show:

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 verbunden mit sys.tcp_endpoints auf Mirror show:

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
RateControl
quelle
Befindet sich die Datenbank im vollständigen Wiederherstellungsmodell? Werden während der Einrichtung Protokollsicherungsjobs ausgeführt? Haben Sie den Hauptschlüssel auf dem Principal gesichert und auf dem Spiegel für TDE wiederhergestellt?
Robert L Davis
Ja, beide dbs sind in voller Genesung. Während ich die Sicherung durchführe (nur 1 Tabelle mit 4 Zeilen), werden keine Jobs ausgeführt. Es dauert 2 Sekunden. Ich habe den Hauptschlüssel gesichert und im Spiegel wiederhergestellt. Ich werde diesen Code morgen veröffentlichen, wenn ich wieder an die Arbeit gehe.
RateControl
Ich habe das TDE-Skript und einige dmvs hinzugefügt
RateControl

Antworten:

10

Ich habe eine Website mit einem Kommentar dazu gefunden.

Ich habe den Code direkt nach dem Wiederherstellen des Schlüssels und des Zertifikats hinzugefügt

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

Es funktioniert wie ein Zauber, es macht ein wenig Sinn, dass ich den Hauptschlüssel, den ich wiederhergestellt habe, mit dem Diensthauptschlüssel des neuen Servers verschlüsseln musste. Ich vermute.

zucken

RateControl
quelle
1
Ich
bin