Sql server 2008 具有数据加密功能的Sql Server 2008R2企业版-备份和恢复

Sql server 2008 具有数据加密功能的Sql Server 2008R2企业版-备份和恢复,sql-server-2008,encryption-symmetric,Sql Server 2008,Encryption Symmetric,我有一个数据库,在它上启用了对称加密,以加密某些列。 在从脚本创建DB后,我创建了一个SP以启用加密,如下所示 CREATE PROCEDURE [dbo].[sys_EnableSymmetricEncryption] AS BEGIN --If there is no master key, create one now. IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101) C

我有一个数据库,在它上启用了对称加密,以加密某些列。 在从脚本创建DB后,我创建了一个SP以启用加密,如下所示

CREATE PROCEDURE [dbo].[sys_EnableSymmetricEncryption]
AS
BEGIN
--If there is no master key, create one now. 
IF NOT EXISTS 
  (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
  CREATE MASTER KEY ENCRYPTION BY 
  PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9'

CREATE CERTIFICATE My_Certificate
  WITH SUBJECT = 'My Database';

CREATE SYMMETRIC KEY My_Key_01
  WITH ALGORITHM = AES_256
  ENCRYPTION BY CERTIFICATE My_Certificate;
END 
所以,在我从脚本创建db之后,我运行这个,然后我可以将数据存储在加密列中

并使用

OPEN SYMMETRIC KEY My_Key_01
   DECRYPTION BY CERTIFICATE My_Certificate;

SELECT [CardID]
      ,CONVERT(nvarchar, DecryptByKey([CardNumber])) as 'CardNumber'
      ,CONVERT(nvarchar, DecryptByKey([CardSecurityCode])) as 'CardSecurityCode'
      ,CONVERT(nvarchar, DecryptByKey([CardExpirationDate])) as 'CardExpirationDate'
      ,CONVERT(nvarchar, DecryptByKey([NameOnCard])) as 'NameOnCard'
    FROM [Cards]
在我备份数据库并尝试在另一台服务器上恢复备份之前,所有这些都可以正常工作 还原后,当我尝试运行Select(如上所述)时,我会出现此错误

执行此操作之前,请在数据库中创建主密钥或在会话中打开主密钥。

所以我试着用

IF NOT EXISTS 
  (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
  CREATE MASTER KEY ENCRYPTION BY 
  PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9'
但是在选择时仍然会得到相同的错误。 如果我尝试运行上面显示的第一个Sp,以创建主密钥、证书和对称密钥,则会出现错误

Msg 15581,第16级,状态3,程序系统启用对称加密,第11行
执行此操作之前,请在数据库中创建主密钥或在会话中打开主密钥。
Msg 15282,16级,状态1,程序系统启用对称加密,第14行
名为“OneTest\u key\u 01”或用户定义的唯一标识符的密钥已存在,或者您没有创建的权限

也许我应该在创建证书和对称密钥之前删除它们,但我不知道它们在哪里

你知道怎么处理吗

谢谢

PS如果我在同一台服务器上恢复,即使是作为不同的数据库,所有都可以正常运行

尝试运行:

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9';
尝试运行:

ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '9809u0ij989oih9o8yyo98yyo89uyp9p9';

当我运行此命令时,会出现以下错误:
Msg 15329,级别16,状态20,第1行当前主密钥无法解密。如果这是数据库主密钥,则在执行此操作之前,应尝试在会话中打开它。强制选项可用于忽略此错误并继续操作,但由旧主密钥加密的数据将丢失。
有什么想法吗?不幸的是,没有其他想法。我只能分享我在网上找到的东西:当我运行这个程序时,我得到以下错误:
Msg 15329,16级,状态20,第1行当前主密钥无法解密。如果这是数据库主密钥,则在执行此操作之前,应尝试在会话中打开它。强制选项可用于忽略此错误并继续操作,但由旧主密钥加密的数据将丢失。
有什么想法吗?不幸的是,没有其他想法。我只能分享我在网上找到的东西: