'密钥在指定状态下无效。(System.Security)' 注册服务器导入 (SSMS)

kne*_*els 6 ssms ssms-2017

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

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

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

有没有解决的办法?

Gra*_*ger 8

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

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

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

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

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

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

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


在 Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.ProtectData(字符串输入,布尔加密)在 Microsoft.SqlServer.Management 处的System.Security.Cryptography.ProtectedData.Unprotect(Byte[] 加密数据,Byte[] 可选Entropy,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 , TreeNode集合节点)

然后我经历了这个过程:

  1. 在 SSMS 中,修复“服务器”。
  2. 在文件中,将“良好”的加密密码字符串复制/粘贴到使用相同密码进行连接的所有其他“服务器”。
  3. 重新启动 SSMS。
  4. 根据需要重复。


bob*_*obt 7

我喜欢格兰杰的回答,因为从另一台计算机重新导出对我来说很麻烦。

但我没有像上面的 Granger 那样交换密码,而是删除了它们(如果需要,您可以从 SSMS 重新输入密码)。要轻松删除密码,请使用Notepad++并搜索password=[^;]*;

使用正则表达式搜索。

替换为空白。


小智 5

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