Onde as credenciais do SQL Management Studio são salvas?

2

Quando entramos no SQL Management Studio (usando o nome do servidor, login e senha) com marcada "Lembrar senha". Eu preciso saber, onde salvar no PC.

Eu preciso formatar meu PC. E quando instalamos o SQL Management Studio, perderei todas as minhas credenciais que salvei. É por isso que preciso de obter os arquivos para backup onde salvar.

    
por Gaurang Mistry 05.10.2011 / 15:08

5 respostas

2

Seria útil saber em qual versão do SQL Server e em qual SO você está executando o SSMS. Dito isto, para o SQL Server 2008, ele é armazenado no arquivo SqlStudio.bin encontrado:

C:\Documents and Settings\<userName>\Application Data\Microsoft\Microsoft SQL Server0\Tools\Shell\SqlStudio.bin

Entendo que há muitas outras configurações armazenadas aqui e que simplesmente mover esse arquivo para algum lugar pode ou não funcionar para você.

    
por 05.10.2011 / 15:44
5

Supondo que você esteja executando o SQL 2008 ou superior, na janela Servidores Registrados, clique com o botão direito do mouse na pasta em "DAtabase Engine" e selecione Tarefas e, em seguida, Exportar. Especifique um arquivo e desmarque a caixa de seleção "Não incluir nomes de usuário e senhas no arquivo de exportação". Clique OK. Seguro este arquivo. Quando você reconstruir sua máquina, importe o arquivo e você terá tudo o que foi salvo nessa lista.

    
por 05.10.2011 / 21:12
3

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.

    
por 28.04.2017 / 21:06
2

Certamente não é salvo em texto simples. Se você não sabe a senha, você deve apenas redefini-la no servidor. Como esse é um site para administradores de sistemas e você definitivamente lê o faq , eu assumo que você é o administrador do servidor e pode fazer isso sem problema.

    
por 05.10.2011 / 15:24
1

A resposta é uma versão simples baseada em respostas anteriores neste post com algumas correções necessárias.

Supondo que você esteja executando o SQL 2008 mais tarde

Vá para o Microsoft SQL Server Management Studio, clique com o botão direito do mouse em qualquer servidor que você já tenha conectado, clique em " Registrar " e selecione o servidor, a senha já deve estar preenchida se você tiver esse servidor senha salva. Em seguida, clique em "Salvar" Agora vá para o Menu Principal - > Ver - > Servidores registrados, você verá o servidor que acabou de registrar, clique com o botão direito nele e clique em Tarefas - > Exportar, especificar um nome de arquivo e desmarcar "Não incluir nome de usuário e senhas no arquivo de exportação", o servidor exportado terá uma extensão como: ".regsrvr" agora usando o seguinte script, você verá a seqüência de conexão descriptografada:

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 ""
}

Como usar o script:

  • Salve o conteúdo do script como DecryptConnString.ps1
  • PowerShell aberto
  • Digite: ./DecryptConnString.ps1 -FileName 'prod.regsrvr'
por 17.08.2018 / 18:04

Tags