Nuestro equipo de especialistas pasados varios días de investigación y de juntar de datos, obtuvimos los datos necesarios, deseamos que todo este artículo sea de gran utilidad para tu plan.
Solución:
Solución 1:
Suponiendo que está ejecutando SQL 2008 o superior, en la ventana Servidores registrados haga clic con el botón derecho en la carpeta debajo de “Motor de base de datos” y seleccione Tareas y luego Exportar. Especifique un archivo y desmarque la casilla de verificación “No incluir nombres de usuario y contraseñas en el archivo de exportación”. Haga clic en Aceptar. Guarde este archivo. Cuando reconstruya su máquina, importe el archivo y tendrá todo lo que se guardó en esa lista.
Solucion 2:
Primero debe registrar los servidores en el SSMS. Haga clic con el botón derecho en un servidor en el Explorador de objetos y seleccione Registrarse o haga clic derecho Grupos de servidores locales, Seleccione Registro de nuevo servidor y seleccione el nombre del servidor. La contraseña del servidor se completará si se recordaron antes. Luego, exporte los servidores según la respuesta de @mrdenny.
Ahora viene la parte complicada. Debe volver a cifrar las contraseñas en el perfil de usuario en la máquina de destino. He preparado un script de PowerShell que puede hacer eso.
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)
En la máquina de origen, ejecute .Move-SqlRegisteredServers.ps1 -FileName 'Your.regsrvr' -Operation Decrypt
. Esto reemplazará las contraseñas cifradas con texto sin formato.
En la máquina de destino, ejecute .Move-SqlRegisteredServers.ps1 -FileName 'Your.regsrvr' -Operation Encrypt
. Esto encriptará las contraseñas nuevamente usando la nueva key.
Ahora puede importar el Your.regsrvr
archivo en SSMS y tener sus servidores junto con las credenciales guardadas.
Solución 3:
Sería útil saber en qué versión de SQL Server y en qué sistema operativo está ejecutando SSMS. Dicho esto, para SQL Server 2008, se almacena en el archivo SqlStudio.bin encontrado:
C:Documents and SettingsApplication DataMicrosoftMicrosoft SQL Server100ToolsShellSqlStudio.bin
Tengo entendido que hay muchas otras configuraciones almacenadas aquí y que simplemente mover ese archivo a algún lugar, puede funcionar o no para usted.
Solución 4:
Ciertamente no está guardado en texto sin formato. Si no conoce la contraseña, simplemente debe restablecerla en el servidor. Dado que este es un sitio para administradores de sistemas y definitivamente leíste las preguntas frecuentes, supongo que eres el administrador del servidor y que puedes hacerlo sin problemas.
Solución 5:
La respuesta es una versión simple basada en respuestas anteriores en esta publicación con algunas correcciones necesarias.
Suponiendo que está ejecutando SQL 2008 o posterior
Vaya a Microsoft SQL Server Management Studio, haga clic con el botón derecho en cualquiera de los servidores que ya haya conectado, haga clic en “Registrarse“y seleccione el servidor, la contraseña ya debería estar completa si tiene esta contraseña guardada en el servidor. Luego haga clic en” Guardar “. Ahora vaya al Menú principal -> Ver -> Servidores registrados, verá el servidor que acaba de registrar, ahora haga clic derecho en y haga clic en Tareas -> Exportar, especifique un nombre de archivo y desmarque “No incluir nombre de usuario y contraseñas en el archivo de exportación”, el servidor exportado tendrá una extensión como: “.regsrvr”. conexión string descifrado:
param(
[Parameter(Mandatory=$true)]
[string] $FileName
)
Add-Type -AssemblyName System.Security
$ErrorActionPreference = 'Stop'
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 -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
echo ""
echo "Encrypted Connection String:"
echo $connString
echo ""
if ($connString -inotmatch 'password="?([^";]+)"?') continue
$password = $Matches[1]
$password = Unprotect-String $password
echo ""
echo "Decrypted Connection String:"
$connString = $connString -ireplace 'password="?([^";]+)"?', "password=`"$password`""
echo $connString
echo ""
Cómo utilizar el script:
- Guarde el contenido del script como DecryptConnString.ps1
- PowerShell abierto
- Escriba: ./DecryptConnString.ps1 -FileName ‘prod.regsrvr’
Si para ti ha resultado de utilidad nuestro artículo, agradeceríamos que lo compartas con otros entusiastas de la programación de esta manera nos ayudas a dar difusión a esta información.