Kembalikan database terenkripsi ke server lain

10

Saya menggunakan produk yang berjalan pada SQLServer 2008. Maklum perusahaan yang memasoknya tidak menawarkan dukungan SQLServer. Ketika saya menginstal produk saya menetapkan kata sandi untuk mengenkripsi database. Saya ingin menjalankan salinan produk lain untuk pengujian di server lain. Saya telah memulihkan database ke server lain dan menginstal produk di server lain itu. Ketika saya menginstalnya saya memberikan kata sandi yang sama, dan kemudian mengembalikan cadangan dari server utama. Namun saya menerima pesan kesalahan:

System.Data.SqlClient.SqlException: An error occurred during decryption.

dari produk. Saya dapat mengakses tabel menggunakan SQLServer Management studio.

Saya sudah mencoba ini:

di server pertama:

CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'

BACKUP CERTIFICATE  cert1 TO FILE = 'd:\backup\cert1.dat' 
WITH PRIVATE KEY 
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)

di server kedua:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'

CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)

Saya juga mencoba ini di server kedua:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'

tapi itu memberi pesan kesalahan tentang kunci asimetris.

Bagaimana saya bisa mengembalikan cadangan dari server pertama ke server kedua?

Memperbarui:

Ada juga kunci asimetris dan simetris dalam database. Jika saya membuka kunci simetris menggunakan kunci asimetris saya mendapatkan kesalahan yang sama, jadi saya pikir itu sebabnya itu tidak berfungsi - entah bagaimana kunci tidak mentransfer sedemikian rupa sehingga dapat digunakan.

paulmorriss
sumber

Jawaban:

8

Saya menulis entri blog tentang mirroring dan TDE.

Butuh beberapa saat untuk mengetahui bahwa untuk mendapatkan db di server sekunder, saya memerlukan baris kode:

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO

Kata sandinya sama dengan yang saya gunakan untuk mengenkripsi file kunci utama. Setelah mengeluarkan perintah pada server SQL ke-2, semuanya berjalan dengan baik. Ini adalah postingan db.stackexchange yang saya buat juga.

RateControl
sumber
Entri blog itu bermanfaat. Saya telah mengikutinya kecuali bahwa alih-alih "master" saya menggunakan database tertentu yang ingin saya salin. Saya mendapatkan kesalahan "Terjadi kesalahan saat mendekripsi kunci asymmetric 'asym_something' yang dienkripsi oleh kunci master lama. Opsi FORCE dapat digunakan untuk mengabaikan kesalahan ini dan melanjutkan operasi, tetapi data yang tidak dapat didekripsi oleh kunci master lama akan menjadi tidak tersedia. " ketika saya mengembalikan kunci master dari file. Haruskah saya memaksakannya? (Ini setelah saya memulihkan basis data, sedangkan instruksi Anda mengembalikannya nanti.)
paulmorriss
1
Terima kasih, butuh waktu lama bagi saya untuk mengetahuinya. eek, saya tidak yakin Anda harus memaksanya. Cara saya memahaminya, "kunci" terkait dengan database MASTER pada setiap server. Satu-satunya hal yang terkait dengan database adalah sertifikat yang ditandatangani oleh kunci master. Jadi, Anda perlu membuat kunci master di server1, buat cadangannya, lalu kembalikan kunci pada server 2. Kemudian pindah ke sertifikat untuk database. Saya harap orang lain bisa menjelaskan masalah ini.
RateControl