Khôi phục cơ sở dữ liệu được mã hóa sang máy chủ khác


10

Tôi đang sử dụng một sản phẩm chạy trên SQLServer 2008. Có thể hiểu rằng công ty cung cấp nó không cung cấp hỗ trợ SQLServer. Khi tôi cài đặt sản phẩm, tôi đã chỉ định mật khẩu để mã hóa cơ sở dữ liệu. Tôi muốn chạy một bản sao khác của sản phẩm để thử nghiệm trên một máy chủ khác. Tôi đã khôi phục cơ sở dữ liệu sang máy chủ khác và cài đặt sản phẩm trên máy chủ khác đó. Khi tôi cài đặt, tôi đã cung cấp cùng một mật khẩu và sau đó khôi phục bản sao lưu từ máy chủ chính. Tuy nhiên, tôi nhận được thông báo lỗi:

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

từ sản phẩm. Tôi có thể truy cập các bảng bằng cách sử dụng SQLServer Management studio.

Tôi đã thử điều này:

trên máy chủ đầu tiên:

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

trên máy chủ thứ hai:

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

Tôi cũng đã thử điều này trên máy chủ thứ hai:

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

nhưng điều đó đã đưa ra một thông báo lỗi về một khóa không đối xứng.

Làm cách nào tôi có thể khôi phục bản sao lưu từ máy chủ đầu tiên lên máy chủ thứ hai?

Cập nhật:

Có một khóa bất đối xứng và đối xứng trong cơ sở dữ liệu. Nếu tôi mở khóa đối xứng bằng khóa bất đối xứng, tôi cũng gặp lỗi tương tự, vì vậy tôi nghĩ đó là lý do tại sao nó không hoạt động - bằng cách nào đó, các phím không chuyển theo cách mà chúng có thể được sử dụng.

Câu trả lời:


8

Tôi đã viết một mục blog về phản chiếu và TDE.

Phải mất một thời gian tôi mới nhận ra rằng để có được db trên máy chủ thứ cấp, tôi cần dòng mã:

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

Mật khẩu giống với mật khẩu mà tôi đã sử dụng để mã hóa tệp khóa chính. Sau khi ban hành lệnh trên máy chủ SQL thứ 2, mọi thứ đã chơi tốt. Đây là bài viết db.stackexchange tôi cũng đã làm.


Mục blog đó là hữu ích. Tôi đã theo dõi nó ngoại trừ thay vì "chính chủ", tôi sử dụng cơ sở dữ liệu cụ thể mà tôi muốn sao chép. Tôi gặp lỗi "Đã xảy ra lỗi khi giải mã khóa bất đối xứng 'asym_s Something' được mã hóa bởi khóa chính cũ. Tùy chọn FORCE có thể được sử dụng để bỏ qua lỗi này và tiếp tục thao tác, nhưng dữ liệu không thể được giải mã bằng khóa chính cũ sẽ trở nên không có sẵn. " khi tôi khôi phục khóa chủ từ tệp. Tôi có nên bắt nó không? (Đây là sau khi tôi đã khôi phục cơ sở dữ liệu, trong khi hướng dẫn của bạn sẽ khôi phục lại sau này.)
paulmorriss

1
Cảm ơn, tôi đã mất rất lâu để tìm ra nó. eek, tôi không chắc chắn rằng bạn nên ép buộc nó. Theo cách tôi hiểu, "khóa" được gắn với cơ sở dữ liệu MASTER trên mỗi máy chủ. Điều duy nhất được gắn với cơ sở dữ liệu là chứng chỉ được ký bởi khóa chính. Vì vậy, bạn cần tạo khóa chủ trên server1, sao lưu nó, sau đó khôi phục khóa trên máy chủ 2. Sau đó di chuyển qua chứng chỉ cho cơ sở dữ liệu. Tôi hy vọng người khác có thể làm sáng tỏ chủ đề này.
RateControl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.