got*_*tqn 6 sql-server backup encryption sql-server-2014
我在同一台机器上有两个 SQL Server 实例。我想在其中一个数据库上创建加密备份,然后在第二个实例上还原它。我正在执行以下步骤:
在master将用于加密我们的证书的数据库中创建和备份数据库主密钥
USE MASTER;
GO
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'MasterKey_Password';
GO
BACKUP MASTER KEY
TO FILE = 'E:\GKKeys\MASTER_KEY.key'
ENCRYPTION BY PASSWORD = 'MasterKey_BACKUP_Password';
GO
Run Code Online (Sandbox Code Playgroud)创建并备份将用于加密的证书:
USE MASTER;
GO
-- ????????? ??????????, ????? ?? ????????? ?? ?????????? ?? backup-a
CREATE CERTIFICATE BackupEncryptTestCert
WITH SUBJECT = 'smGK_BackupCertificate'
GO
BACKUP CERTIFICATE BackupEncryptTestCert
TO FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE.cer'
WITH PRIVATE KEY
(
FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE_PRIVATE_KEY.key'
,ENCRYPTION BY PASSWORD = 'smGK_BackupCertificate_BACKUP_Password'
);
Run Code Online (Sandbox Code Playgroud)创建备份:
BACKUP DATABASE smGK
TO DISK = 'E:\GKKeys\smGKFULLEncrtypted.back'
WITH COMPRESSION, STATS = 10, ENCRYPTION (ALGORITHM = AES_256,SERVER CERTIFICATE = BackupEncryptTestCert)
Run Code Online (Sandbox Code Playgroud)现在在第二个实例中,我想恢复master key但不允许:
USE MASTER;
GO
RESTORE MASTER KEY
FROM FILE = 'E:\GKKeys\MASTER_KEY.key'
DECRYPTION BY PASSWORD = 'MasterKey_BACKUP_Password'
ENCRYPTION BY PASSWORD = 'smGK_MasterKeyPassword';
Run Code Online (Sandbox Code Playgroud)
消息 15317,级别 16,状态 2,第 4 行 主密钥文件不存在或格式无效。
谁能告诉这是什么原因造成的?
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
2015 年 4 月 20 日 17:29:27
版权所有 (c) 微软公司
企业版:基于核心的许可(64 位)
Windows NT 6.3(内部版本 9600:)(管理程序)
SQL*_*DBA 10
在您的第二个实例上创建一个全新的主密钥。即不要从您从第一个实例中获取的备份创建它。然后从备份中恢复证书,然后尝试。我猜你不需要主密钥,只需要证书来恢复。请按照以下步骤操作:
步骤 1:创建主密钥
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'MasterKey_Password';
Run Code Online (Sandbox Code Playgroud)
步骤 2:验证对 cert 和 pvt 密钥的权限
确保第二个实例的 SQL Server 服务帐户对您创建的 cert 和 pvt 密钥具有完全权限。
Step3:从备份创建证书
CREATE CERTIFICATE BackupEncryptTestCert
FROM FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE.cer'
WITH PRIVATE KEY
(
FILE = 'E:\GKKeys\SMGK_BACKUP_CERTIFICATE_PRIVATE_KEY.key' ,
DECRYPTION BY PASSWORD = 'smGK_BackupCertificate_BACKUP_Password'
)
Run Code Online (Sandbox Code Playgroud)
Step4:恢复数据库
我无法发表评论,但我想为此答案添加一些细节。
在 SQL Server 中,所有密钥始终受到密码或加密层次结构中的另一个密钥的保护。这也延伸到备份文件。由于备份文件旨在存储在站点中,因此 SQL Server 加密层次结构无法保护它们。因此,我们必须提供一个密码来保护密钥。