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



本地建了一个数据库,并创建了秘钥

附加到另外一个数据实例的时候,提示主密钥未打开。



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

 

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) 加密)的副本,即可拥有将来启用自动解密的选项。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值