我有些困惑,可以帮助一下。我们正在将SQL Server 2014 Enterprise版本从本地迁移到AWS SQL Server 2017 Enterprise系统。
当前系统同时包含用于列级加密的TDE和对称密钥加密。这就是乐趣的开始。我能够将数据库还原到新的2017实例,并且还原后TDE正常工作。对称密钥列级加密不起作用。
使用以下代码创建的对称加密:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'passwowrd';
CREATE CERTIFICATE AUPW WITH SUBJECT = 'AccountsUsers-Credentials';
CREATE SYMMETRIC KEY AccountsUsers_Credentials
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE AUPW;
然后,我尝试执行以下步骤将主密钥和对称密钥还原到新服务器。
在SQL Server 2014实例上:
OPEN MASTER KEY DECRYPTION BY PASSWORD = N'password';
GO
BACKUP MASTER KEY
TO FILE = N'...\MSSQL\DATA\masterkey.dmk'
ENCRYPTION BY PASSWORD = 'password'
GO
BACKUP CERTIFICATE AUPW
TO FILE ='...\MSSQL\DATA\AUPW.cer'
WITH PRIVATE KEY
(FILE ='...\MSSQL\DATA\AUPW.pk', ENCRYPTION BY PASSWORD ='password')
在SQL Server 2017实例上,还原数据库并确保TDE正常运行并且可访问数据库后,我尝试运行以下代码:
USE NewDB
GO
RESTORE MASTER KEY
FROM FILE = N'...\MSSQL\DATA\Masterkey.dmk'
decryption by password = 'password'
encryption by password = 'password'
GO
CREATE CERTIFICATE AUPW FROM FILE ='...\MSSQL\DATA\AUPW.cer'
WITH PRIVATE KEY(FILE='...\MSSQL\DATA\AUPW.pk',
DECRYPTION BY PASSWORD='password',
ENCRYPTION BY PASSWORD='password');
但是,当我运行RESTORE MASTER KEY命令时,出现以下错误:
消息15329,级别16,状态30,第43行 当前的主密钥无法解密。如果这是数据库主密钥,则应在执行此操作之前尝试在会话中打开它。可以使用FORCE选项忽略此错误并继续操作,但是用旧主密钥加密的数据将丢失。
我尝试打开主密钥,并收到错误消息,但是我使用了与备份DBMK时相同的密码。
消息15313,第16级,状态1,第41行 未使用指定的解密器对密钥进行加密。
强制选项既不起作用,也不创建新的主密钥。
任何人都知道他们在做什么,我在这里做错了吗?我现在唯一想做的另一件事就是在迁移之前关闭所有加密,但是我并不是这个选项的忠实支持者。
感谢帮助。
目标错误的原因是由于目标中的服务主密钥(在SQL Server实例级别)与源中的服务主密钥不同。
数据库主密钥由源服务器上的服务主密钥加密。Refer to article
因此,在源中,首先需要通过服务主密钥删除加密,并通过密码添加其他加密,然后再进行备份。
alter master key add encryption by password = 'Pass@1234'
alter master key drop encryption by service master key
将还原发布到目标位置,您必须执行以下步骤:
open master key decryption by password = 'Pass@1234'
alter master key add encryption by service master key
alter master key drop encryption by password = 'Pass@1234'
请参阅以下文章: