物理服务器转换时SQL Server 2008 Open Master Key错误

Tom*_*icz 24 sql encryption aes sql-server-2008

我将SQL Server数据库从一个系统复制到下一个相同的设置,但是完全不同的物理机器.我使用Norton Ghost手动恢复文件,例如,重新安装SQL Server 2008 Express后,在c:\ Program Files中找到的整个SQL Server 2008文件夹.

我的一个数据库在其中一个表列上启用了AES_256加密.我重置我的IIS7并试图运行访问数据库的应用程序,检索数据后,我收到此错误:

'/'应用程序中的服务器错误.请在执行此操作之前在数据库中创建主密钥或在会话中打开主密钥.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.Data.SqlClient.SqlException:请在执行此操作之前在数据库中创建主密钥或在会话中打开主密钥.

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

我已经完成了一些阅读,并找到了一些关于AES加密如何与机器密钥相关联的链接,但是如何将其复制到新系统却不知所措.或者甚至可能不是这样.

注意:我尝试删除对称密钥,证书和主密钥并重新创建它们.这消除了错误,但是通过AES_256加密的数据没有显示出来.但是,未加密的列可以执行.

任何帮助将非常感激.提前致谢!

Sam*_*Sam 69

使用服务器主密钥对数据库主密钥进行加密,该主密钥特定于安装SQL Server的计算机.将数据库移动到另一台服务器时,您将无法自动解密并打开数据库主密钥,因为本地服务器密钥很可能不同.如果无法解密数据库主密钥,则无法解密依赖于它的任何其他内容(证书,对称密钥等).

基本上,您希望针对新服务器密钥重新加密数据库主密钥,这可以使用此脚本完成(使用管理员权限):

-- Reset database master key for server (if database was restored from backups on another server)
OPEN MASTER KEY DECRYPTION BY PASSWORD = '---your database master key password---'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
Run Code Online (Sandbox Code Playgroud)

请注意,在创建数据库主密钥时,也应始终提供密码,以便在无法使用服务主密钥的情况下使用密码打开密钥 - 希望您已将密码存储在某处!

或者,您可以还原数据库主密钥的备份 - 但您需要为目标服务器而不是源服务器创建的备份.

如果您没有备份或密码,那么我不确定您是否能够恢复新服务器上的加密数据,因为您必须删除并使用新密码重新创建数据库主密钥,这会杀死任何依赖的密钥和数据.

  • 哇靠!你是我的救世主!如果我可以点击那个向上箭头一千次,我会的!非常感谢! (3认同)

wru*_*kie 5

我刚刚遇到了类似的情况,在操作系统驱动器死机后重建服务器。我重新安装了 SQL 并将其重新连接到我未受影响的数据驱动器上的所有旧数据库。除了我的加密列之外,一切正常。但我的问题是主服务密钥被冲洗掉了。我能够通过返回到移动前作为我的 SQL Server 服务帐户的相同域凭据来修复我的主服务密钥。

这篇文章给了我解决方案(感谢Matt Bowler的出色文章)。我知道本地机器密钥已更改,但我的救赎是我可以使用相同的服务帐户。

服务主密钥:在密钥层次结构的顶部是服务主密钥。每个 SQL Server 实例有一个,它是一个对称密钥,存储在 master 数据库中。用于加密数据库主密钥、链接服务器密码和凭据,它在第一次 SQL Server 启动时生成。

没有与此密钥关联的用户可配置密码——它由 SQL Server 服务帐户和本地计算机密钥加密。在启动时,SQL Server 可以使用这些解密之一打开服务主密钥。如果其中一个失败 – SQL Server 将使用另一个并“修复”失败的解密(如果两者都失败 – SQL Server 将出错)。这是为了解决类似集群的情况,其中本地机器密钥在故障转移后会有所不同。这也是应该使用 SQL Server 配置管理器更改服务帐户的原因之一——因为这样可以正确重新生成服务主密钥加密。

http://mattsql.wordpress.com/2012/11/13/migrating-sql-server-databases-that-use-database-master-keys/