尝试还原加密备份时,在辅助副本上出现以下错误,即使副本具有从生成备份的原始/主服务器还原的主密钥(dmk),服务主密钥,证书和私钥。
Msg 15581, Level 16, State 7, Line 137
Please create a master key in the database or open the master key in the session before performing this operation.
Msg 3013, Level 16, State 1, Line 137
VERIFY DATABASE is terminating abnormally.
为了规避错误,我打开并关闭这样的操作周围的主密钥。但是,在主服务器上,我不需要打开和关闭主密钥来执行操作。
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MyTest!M4st3rPass';
RESTORE VERIFYONLY FROM DISK = '\\FS1\SqlBackups\SQL01\SystemDbs\msdb_backup_2017_09_22_171915_6346240.bak' WITH FILE = 1, NOUNLOAD, NOREWIND;
CLOSE MASTER KEY ;
我认为这是因为主服务器具有加密指纹的备份历史记录,但我想知道我是否遗漏了与辅助服务器相关的其他内容。
但是,毕竟,由于在辅助服务器上恢复了证书,因此我将其分配给备份加密的SystemsDB备份维护计划选项,但如果由于同样的原因检查了验证选项,则作业将失败。
Source: Back Up Database Task
Executing query "BACKUP DATABASE [master] TO DISK = N'\\FS1\SqlBac...".: 50% complete
End Progress
Error: 2017-09-22 17:08:09.28
Code: 0xC002F210
Source: Back Up Database Task Execute SQL Task
**Description**: Executing the query "declare @backupSetId as int select @backupSetId =..."
failed with the following error: "Please create a master key in the database or open the master key in the session before performing this operation.
VERIFY DATABASE is terminating abnormally.".
Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
End Error
答案 0 :(得分:2)
固定。
这一段放弃了它:
每当更改DMK时,都会以静默方式更新存储在主系统数据库中的DMK副本。但是,可以使用 ALTER MASTER KEY 语句的 DROP ENCRYPTION BY SERVICE MASTER KEY 选项更改此默认值。必须使用 OPEN MASTER KEY 语句和密码打开未通过服务主密钥加密的DMK。
在我的辅助节点上运行以下内容。
检查完毕后到达解决方案。
--on primary, output: master
select name from sys.databases where is_master_key_encrypted_by_server=1
--on secondary, output: nothing...
select name from sys.databases where is_master_key_encrypted_by_server=1
所以我想我是否可以通过服务主密钥默认加密主密钥,然后这将自动解密。
--on secondary
drop certificate [BackupCertWithPK]
drop master key
--Skipped restore master key from file.
--Instead, I ran create master key with password.
create master key encryption by password = 'MyTest!Mast3rP4ss';
--verify by open/close.
open master key decryption by password = 'MyTest!Mast3rP4ss';
close master key;
--proceed to restore/create cert from file.
create cerfiticate [BackupCertWithPK]
from file = '\\FS1\SqlBackups\SQL1\Donot_delete_SQL1-Primary_BackupCertWithPK.cer'
with private key (file = '\\FS1\SqlBackups\SQL1\Donot_delete_SQL1-Primary_BackupCertWithPK.key' , decryption by password = 'key_Test!prim@ryP4ss') ;
在此之后再次运行以上选择。
--on secondary, output: master, now there was hope again!
select name from sys.databases where is_master_key_encrypted_by_server=1
最后,我使用为验证和加密设置的选项重新运行我的备份作业。验证步骤没有失败,也没有提示打开/关闭主密钥。
以下只需按预期工作,无需打开/关闭主密钥。
RESTORE VERIFYONLY FROM DISK = '\\FS1\SqlBackups\SQL01\SystemDbs\msdb_backup_2017_09_22_171915_6346240.bak' WITH FILE = 1, NOUNLOAD, NOREWIND;
Wohooo!任务完成。
答案 1 :(得分:0)
我不确定这是否正是您所寻找的,但OPEN MASTER KEY备注似乎有些相关。
您将100%想要在生产中测试它,但似乎一旦打开了主密钥,您就可以选择不要求使用ALTER MASTER KEY REGENERATE
命令。
如果使用服务主密钥加密数据库主密钥, 它将在需要解密时自动打开或 加密。在这种情况下,没有必要使用OPEN MASTER 主要声明。
首次连接或恢复数据库时 SQL Server的新实例,数据库主密钥的副本 (由服务主密钥加密)尚未存储在服务器中。
您必须使用OPEN MASTER KEY语句来解密数据库 主密钥(DMK)。一旦DMK被解密,您就可以选择 通过使用ALTER启用自动解密 MASTER KEY REGENERATE语句,用于为服务器提供副本 DMK,使用服务主密钥(SMK)加密。
从早期版本升级数据库时,DMK应该是 重新生成以使用较新的AES算法。有关的更多信息 重新生成DMK,请参阅ALTER MASTER KEY(Transact-SQL)。时间 需要重新生成DMK密钥以升级到AES取决于 受DMK保护的对象数量。将DMK密钥重新生成 升级到AES只需要一次,对未来没有影响 再生作为关键轮换策略的一部分。
https://docs.microsoft.com/en-us/sql/t-sql/statements/open-master-key-transact-sql
答案 2 :(得分:0)
我遇到了同样的情况,但是没有重新创建MDK,而是运行以下命令来解决此问题: 通过服务主密钥更改加密主密钥