(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

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

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

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

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


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

 

 (7.2.5.1)在执行此操作之前,请在数据库中创建一个主密钥或在会话中打开该主密钥。_第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) 加密)的副本,即可拥有将来启用自动解密的选项。




你可能感兴趣的:(7.2-SQL之常见笔试面试题)