我已经多次更改了 SQL Server 2005 Reporting Services 的服务帐户,但昨天是我第一次遇到可怕的“报告服务器无法解密用于访问的对称密钥......”错误。
该环境是 SQL Server 2005 Enterprise 版,作为命名实例安装在一个盒子上,该盒子还默认安装有 SQL Server 2000 Standard 版。所有东西都是 32 位的。
作为BOL 建议我总是使用 Reporting Services 配置管理器来进行更改,并且从来没有恢复过加密密钥。
但是,最近这一次(必须在生产中,不是吗?),服务帐户更改未能导入现有的加密密钥;从 ReportServerService 日志文件中:
ReportingServicesService!crypto!b!5/19/2009-17:20:37:: i INFO: 以用户身份初始化加密:\ReportingServicesService!crypto!b!5/19/2009-17:20:37:: i INFO: 导出公钥ReportingServicesService!crypto!b!5/19/2009-17:20:37:: i INFO: 执行 sku 验证ReportingServicesService!crypto!b!5/19/2009-17:20:37:: i INFO: 导入现有加密密钥ReportingServicesService!library!b!5/19/2009-17:20:37:: e 错误:引发 Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerDisabledException:报表服务器无法解密用于访问报表服务器数据库中的敏感或加密数据的对称密钥。您必须恢复备份密钥或删除所有加密内容。有关详细信息,请参阅文档。,;信息:Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerDisabledException:报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥。您必须恢复备份密钥或删除所有加密内容。有关详细信息,请参阅文档。---> System.Runtime.InteropServices.COMException (0x80090005):错误数据。(来自 HRESULT 的异常:0x80090005)位于 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode,IntPtr errorInfo)
在 RSManagedCrypto.RSCrypto.ImportSymmetricKey(Byte[] symKeyBlob) 在 Microsoft.ReportingServices.Library.ConnectionManager.GetEncryptionKey() --- 内部异常堆栈跟踪结束 ---
现在,我是一个优秀的小 DBA,并且我拥有以前可用的加密密钥的备份,因此我能够快速从问题中恢复,但是,我想知道的是,为什么会发生这种情况? MS 的这篇文章建议可能发生,但我不喜欢这种说法,认为这是一个完全随机的事件。我读过一个说法,即当您通过 RS 配置管理器以外的其他方式(例如 SQL Server 配置管理器或 Windows 服务)更改 Reporting Services 的服务帐户时,这种情况会定期发生,但现在遗憾的是找不到链接。
因此,我有两个问题:
- 如果我按照建议使用 RS 配置管理器,为什么会发生这种情况?(但是测试成功了,他惊呼道!)
- 我是否应该感到不安,因为我当前的加密密钥不是基于机器/当前服务帐户,而是基于以前的服务帐户?
答案1
- 当您使用其他服务帐户时,密钥应该会失败
报表服务器服务使用对称密钥访问报表服务器数据库中的加密数据。此对称密钥使用与计算机和用于运行报表服务器服务的用户帐户相对应的非对称公钥进行加密。当您更改用于运行报表服务器服务的用户帐户时,报表服务器无法使用非对称公钥解密对称密钥。因此,报表服务器服务无法使用对称密钥访问报表服务器数据库中的数据
2. 我只需使用您当前的配置创建一个新的密钥备份