创建/更新代理帐户的 SQL Server 2012 凭据时出现“损坏的密钥”错误

SQL*_*ain 6 authentication sql-server sql-server-2012

在重新启动无响应的主机 WINTEL 服务器导致 SQL Server 2012 SP3 实例重新启动后,我有一个 SQL 代理日志传送复制作业(它使用代理帐户访问日志备份所在的 NAS 文件共享)因此错误而失败:

验证代理 MyDomain\MyProxyAccount 时出错,系统错误:用户名或密码不正确。

我试图将正确的密码重新应用到代理的凭据并重新创建一个新的凭据,但都因此错误而失败:

此操作所需的密钥似乎已损坏。(Microsoft SQL Server,错误:15507)

我读过一个 MSDN 页面,上面写着:

SQL Server 使用加密密钥来帮助保护存储在服务器数据库中的数据、凭据和连接信息。服务主密钥在 SQL Server 实例首次启动时自动生成,用于加密链接服务器密码、凭据和数据库主密钥。

我不确定如何继续。我的服务主密钥有问题吗?如果是这样,有人可以建议如何解决此问题或指导我在线进一步阅读吗?

更新:我发现 SQL Server 日志中的条目(在主机 WINTEL 服务器重新启动后重新启动实例时写入)进一步表明问题出在服务主密钥上:

无法使用其加密之一解密服务主密钥。服务主密钥初始化期间发生错误。

我仍然欢迎任何关于如何解决这个问题的建议......

SQL*_*ain 2

我将尝试回答我自己的问题(因为我的经验可能会帮助其他人)。首先,关于我遇到的问题,我发现这个博客很有帮助(正如上面 Sean Gallardy 的评论)。

由于我没有可供恢复的服务主密钥 (SMK) 备份,因此我的目的是使用带有 FORCE 选项的 ALTER SERVICE MASTER KEY REGENERATE 重新生成新的 SMK(导致加密实体丢失)。我准备必须重新创建我的凭据机密和链接服务器密码。该实例没有数据库主密钥,但如果这样做,我可以使用其密码打开它们并通过 SMK 重新生成它们(从而避免数据丢失)。

然而,我决定首先看看简单地重新启动 SQL Server 实例是否可以解决该问题- 结果确实如此!重新启动后,服务主密钥验证成功(我通过成功创建新的测试凭证来确认这一点)。

我最好的猜测是,之前阻止 SMK 验证的任何问题(导致“无法使用其加密之一解密服务主密钥”错误日志条目)都已消失。我知道 SMK 始终有两种加密:机器密钥加密和服务帐户加密(这些在集群故障转移或服务帐户更改的情况下提供非此即彼的解密方法)。

由于主机 WINTEL 服务器出现问题,我想这会使机器密钥加密失效。我无法想象是什么使服务帐户加密无效(该帐户没有更改),但无论它是什么,这似乎都是一个暂时的问题。因此,我最好的猜测是,重新启动后,SMK 能够使用服务帐户加密进行自我验证(并且此时创建新的计算机密钥加密)。