SQL Server迁移和加密问题

问题描述 投票:1回答:1

我有些困惑,可以帮助一下。我们正在将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 sql-server encryption encryption-symmetric
1个回答
0
投票

目标错误的原因是由于目标中的服务主密钥(在SQL Server实例级别)与源中的服务主密钥不同。

数据库主密钥由源服务器上的服务主密钥加密。Refer to article

Encryption at SQL Server

因此,在源中,首先需要通过服务主密钥删除加密,并通过密码添加其他加密,然后再进行备份。


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'

请参阅以下文章:

© www.soinside.com 2019 - 2024. All rights reserved.