Primeiro, você precisa registrar os servidores no SSMS. Clique com o botão direito do mouse em um servidor no Pesquisador de Objetos e selecione Registrar ou clique com o botão direito em Grupos de Servidores Locais , selecione Novo Registro do Servidor e selecione o nome do servidor. A senha do servidor será preenchida se forem lembradas antes. Em seguida, exporte os servidores de acordo com a resposta @mrdenny.
Agora vem a parte complicada. Você precisa criptografar novamente as senhas no perfil do usuário na máquina de destino. Eu preparei um script do PowerShell que pode fazer isso.
param(
[Parameter(Mandatory=$true)]
[string] $FileName,
[Parameter(Mandatory=$true)][ValidateSet('Decrypt', 'Encrypt')]
[string] $Operation
)
$ErrorActionPreference = 'Stop'
function Protect-String([string] $clearText)
{
return [System.Convert]::ToBase64String([System.Security.Cryptography.ProtectedData]::Protect([System.Text.Encoding]::Unicode.GetBytes($clearText), $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser))
}
function Unprotect-String([string] $base64String)
{
return [System.Text.Encoding]::Unicode.GetString([System.Security.Cryptography.ProtectedData]::Unprotect([System.Convert]::FromBase64String($base64String), $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser))
}
$document = [xml] (Get-Content $FileName)
$nsm = New-Object 'System.Xml.XmlNamespaceManager' ($document.NameTable)
$nsm.AddNamespace('rs', 'http://schemas.microsoft.com/sqlserver/RegisteredServers/2007/08')
$attr = $document.DocumentElement.GetAttribute('plainText')
if ($attr -eq '' -and $Operation -ieq 'Encrypt')
{
throw "The file does not contain plaintext passwords."
}
if ($attr -ne '' -and $Operation -ieq 'Decrypt')
{
throw "The file does not contain encrypted passwords."
}
$servers = $document.SelectNodes("//rs:RegisteredServer", $nsm)
foreach ($server in $servers)
{
$connString = $server.ConnectionStringWithEncryptedPassword.InnerText
if ($connString -inotmatch 'password="([^"]+)"') {continue}
$password = $Matches[1]
if ($Operation -ieq 'Decrypt')
{
$password = Unprotect-String $password
}
if ($Operation -ieq 'Encrypt')
{
$password = Protect-String $password
}
$connString = $connString -ireplace 'password="([^"]+)"', "password='"$password'""
$server.ConnectionStringWithEncryptedPassword.InnerText = $connString
}
if ($Operation -ieq 'Decrypt')
{
$document.DocumentElement.SetAttribute('plainText', 'true')
}
else
{
$document.DocumentElement.RemoveAttribute('plainText')
}
$document.Save($FileName)
Na máquina de origem, execute .\Move-SqlRegisteredServers.ps1 -FileName 'Your.regsrvr' -Operation Decrypt
. Isso substituirá as senhas criptografadas por texto simples.
Na máquina de destino, execute .\Move-SqlRegisteredServers.ps1 -FileName 'Your.regsrvr' -Operation Encrypt
. Isso criptografará as senhas novamente usando a nova chave.
Agora, você pode importar o arquivo Your.regsrvr
para o SSMS e ter seus servidores junto com as credenciais salvas.