8

我的电脑最近崩溃了,我正在重新安装东西。我想导入我以前 PC 上的注册服务器列表。我有 *.regsrvr 文件的RegSrvr.xml文件G:\Users\<user>\AppData\Roaming\Microsoft\Microsoft SQL Server\140\Tools\Shell 和备份(使用用户名/密码),我可以从我的笔记本电脑中移动这些文件。

我看到将RegSrvr.xml文件移动到新 PC 中的相同位置根本没有任何作用。

当我尝试导入 *.regsrvr 文件时 - 我收到一个错误'Key not valid for use in specified state. (System.Security)',只有大约一半的列表实际导入。

有没有解决的办法?

4

2 回答 2

6

从另一台计算机导入带有密码的 SSMS 服务器注册文件后,我遇到了这个问题。为了解决这个问题,我从另一台计算机重新导出了“无密码”的服务器注册,并重新导入了没有密码的文件。但是,这有效,您可以随时编辑注册。

于 2019-03-18T14:21:31.887 回答
4

问题是密码存储在文件中的加密字符串中,并且使用的加密密钥特定于安装 SSMS 的那台机器。因此,当您导出它们然后在新机器上导入时,您会收到该错误,因为它无法解密/使用密码。

大多数人只是在没有密码的情况下从旧机器重新导出,然后在新机器上导入新的 SSMS 后,他们手动修复所有密码。

我想补充的是,由于它“只是一个文本文件”,因此您可以通过手动编辑 C:\Users{user}\AppData\Roaming\Microsoft\SQL Server Management Studio\RegSrvr.xml 来节省大量工作。

我所做的是导入文件并忽略所有这些错误

====================================

密钥在指定状态下无效。(系统.安全)

------------------------------ 节目地点:


在Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.ProtectData(String input, Boolean encrypt) 在 Microsoft.SqlServer.Management的 System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope 范围) 。 RegisteredServers.RegisteredServer.get_SecureConnectionString() 在 Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.get_ConnectionString() 在 Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.get_ServerName() 在 Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerTree.AddRegisteredServerNode(RegisteredServer regSrv , TreeNodeCollection 节点)

然后我经历了这个过程:

  1. 在 SSMS 中,修复“服务器”。
  2. 在文件中,将“好的”加密密码字符串复制/粘贴到使用相同密码连接的所有其他“服务器”。
  3. 重新启动 SSMS。
  4. 根据需要重复。
于 2020-08-12T18:19:02.723 回答