欢迎访问 格调科技 服务电话 15991746071
Nest 登录
Nest 6 关注
Nest 2 购买

请在数据库中创建一个主密钥或在会话中打开该主密钥。

今天测试将加密的数据库还原到另外一台服务器,执行解密代码的时候出现下面的错误信息:

 

Msg 15581, Level 16, State 3, Line 1

Please create a master key in the database or open themaster key in the session before performing this operation.

 

解决办法1:用密码打开Database Master key

可以使用密码来解开,如分离后复制到另一个服务器上,因为使用不同的服务账户,那么服务主密钥不同,所以就不能解密使用服务主密钥加密的数据库主密钥。这个时候可以使用加密时所提供的密码来解开数据库主密钥。

  我们在创建数据库主密钥的时候,会自动使用服务主密钥进行保护,使用时会自动使用服务主密钥解开数据库主密钥,当然我们也可以删除服务主密钥对数据库主密钥的保护,那么在每一次打开的时候必须手动打开数据库主密钥,因为没有了服务主密钥那么就必须指定在加密时所指定的口令。

 

Open master key decryption by password=’DUfei2008’
ALTER MASTER KEY DEGENERATE WITH ENCRYPTION BY PASSWORD='xxxxx'

 

解决办法2:可以还原服务主密匙。

 

 

参考:OPEN MASTER KEY     RESTORESERVICE MASTER KEY (Transact-SQL)

 

注意: 因为ServiceMaster Key是加密层次的根,如果有其他数据库已经用Service Master Key做过加密会导致问题,所以慎重使用。

 

原因: 默认情况下,数据库主密钥使用服务主密钥进行加密,需要此数据库主密钥进行解密或加密时,它将自动打开。如果数据库第一次附加或还原到新的 SQL Server 实例时,数据库主密钥(由服务主密钥加密)的副本尚未存储在服务器中。 必须使用 OPEN MASTER KEY 语句解密数据库主密钥 (DMK)。 一旦 DMK 解密后,通过使用 ALTER MASTER KEY REGENERATE 语句向服务器提供 DMK(使用服务主密钥 (SMK) 加密)的副本,即可拥有将来启用自动解密的选项。