none
Migração Logons entre MS SQL Server 2008 RRS feed

  • Pergunta

  • Bom dia pessoal,

    Estou encontrando uma dificuldade para solucionar um problema na empresa que trabalho.

    Temos uma prestadora de serviço, aonde fica os nosso servidores de Dados e estamos mudando para outra prestadora de serviço, com as mesmas configurações de ambiente, estou responsável pela migração do Banco como um todo, fiz alguns estudos na internet no site MSDN e em alguns Fóruns que costumo pesquisar.

    Na maioria dos questionamentos semelhantes ao meu caso, encontrei a melhor solução que é, fazer um backup completo do banco de dados e depois restaurar a mesma estrutura em outro banco com o comando "WITH REPLACE", fiz alguns testes em um servidor de teste e funcionou, porem, iria me esquecendo de um pequeno detalhe, antes de restaurar o banco preciso transferir os logins do banco. Ai que entra o meu problema, como faço isso? tem alguns Fóruns que utilizam Scripts mas para o o MS SQL Server 2000, e analisando os Scripts não iria funcionar nesta versão que utilizo do MS SQL Server 2008.

    Alguém possui uma solução para?

    • Tipo Alterado Caio Morais sábado, 18 de agosto de 2012 14:03 Dúvida
    • Tipo Alterado Caio Morais sábado, 18 de agosto de 2012 14:05 Dúvida
    • Movido Gustavo Maia Aguiar sábado, 18 de agosto de 2012 14:31 (De:Alta Disponibilidade)
    sábado, 18 de agosto de 2012 14:03

Respostas

  • Boa Tarde,

    Executar o restore com WITH REPLACE pode ser uma opção perigosa, pois, você pode subscrever algo acidentalmente. Prefiro dropar os arquivos e assim ter consciência plena do que estou a realizar do que optar pelo REPLACE.

    A transferência de logins é muito tranquila entre instâncias do SQL Server 2008. Uma forma rápida que costumo utilizar é criar um projeto no integration services, rodar a tarefa Transfer Logins Task para transferir os logins (lembre-se de configurar a tarefa para manter o mesmo SID e assim evitar ter de remapear). Essa tarefa irá transferir todos os logins, mas aqueles logins do tipo SQL irão ter sua senha trocada por uma senha aleatória. Para resolver isso, rode o seguinte script no servidor de origem (em modo texto)

    SELECT 'ALTER LOGIN ' + NAME + ' WITH PASSWORD = ', LOGINPROPERTY(NAME,'PasswordHash'), ' HASHED' FROM sys.server_principals
    WHERE TYPE = 'S'

    Copie o resultado e rode no servidor de destino. Pronto, os logins terão sido transferidos e com as mesmas senhas.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Gustavo Maia Aguiar sábado, 18 de agosto de 2012 14:31
    • Marcado como Resposta Caio Morais segunda-feira, 5 de novembro de 2012 19:56
    sábado, 18 de agosto de 2012 14:31
  • Boa Tarde,

    O próposito desse script é levar os mesmos usuários e as mesmas senhas (e ele o faz), mas não é possível descobrir quais são as senhas (a única certeza que você terá é que são as mesmas senhas). Se fosse possível descobrir, você teria um gravíssimo problema de segurança. O HASH é um caminho só de ida. Não será possível descriptografá-la.

    A senha está em VARBINARY e palavra HASHED serve justamente para informar que a sequencia em VARBINARY já está criptografada.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    segunda-feira, 27 de agosto de 2012 18:31
  • A dica do Gustavo foi:

    1) Rode o script no servidor de origem;

    2) Copie o resultado do Script;

    3) Cole no servidor de destino e execute.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 27 de agosto de 2012 18:54

Todas as Respostas

  • Boa Tarde,

    Executar o restore com WITH REPLACE pode ser uma opção perigosa, pois, você pode subscrever algo acidentalmente. Prefiro dropar os arquivos e assim ter consciência plena do que estou a realizar do que optar pelo REPLACE.

    A transferência de logins é muito tranquila entre instâncias do SQL Server 2008. Uma forma rápida que costumo utilizar é criar um projeto no integration services, rodar a tarefa Transfer Logins Task para transferir os logins (lembre-se de configurar a tarefa para manter o mesmo SID e assim evitar ter de remapear). Essa tarefa irá transferir todos os logins, mas aqueles logins do tipo SQL irão ter sua senha trocada por uma senha aleatória. Para resolver isso, rode o seguinte script no servidor de origem (em modo texto)

    SELECT 'ALTER LOGIN ' + NAME + ' WITH PASSWORD = ', LOGINPROPERTY(NAME,'PasswordHash'), ' HASHED' FROM sys.server_principals
    WHERE TYPE = 'S'

    Copie o resultado e rode no servidor de destino. Pronto, os logins terão sido transferidos e com as mesmas senhas.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Gustavo Maia Aguiar sábado, 18 de agosto de 2012 14:31
    • Marcado como Resposta Caio Morais segunda-feira, 5 de novembro de 2012 19:56
    sábado, 18 de agosto de 2012 14:31
  • Gostei da sua ideia, estou fazendo e depois comento se deu certo... obrigado pela dica.
    segunda-feira, 20 de agosto de 2012 19:44
  • Oi Caio,

    Isso é dica que vc não encontra em nenhum manual. Costumo utilizá-la em vários upgrades que realizo em atividades de consultoria e cursos personalizados. Vai funcionar tenho certeza. Aguardamos os seus comentários.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    segunda-feira, 20 de agosto de 2012 22:31
  • Boa tarde Gustavo,

    Acredita que hoje que fui conseguir fazer?
    Cara você fala em rodar o Script em modo texto, se refere em EXEC ('SELECT ''ALTER LOGIN '' + NAME + '' WITH PASSWORD = '', LOGINPROPERTY(NAME,''PasswordHash''), ''HASHED'' FROM sys.server_principals WHERE TYPE = ''S''') ?

    É assim que é modo texto?

    Abraço

    segunda-feira, 27 de agosto de 2012 17:52
  • Modo texto que ele diz é o modo de exibição da query, para que você possa copiar e colar o resultado e depois executar sem fazer mais nada, segue exemplo abaixo,


    segunda-feira, 27 de agosto de 2012 17:57
  • Caio,

    Isso mesmo, você altera o formato de retorno dos dados para modo Texto.

    A muito tempo atrás eu utilizei uma Stored Procedure criada pela Microsoft especificamente para esta situação, chamada: SP_help_revlogin

    Talvez posssa ajudar.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 27 de agosto de 2012 18:25
    Moderador
  • Ok, ele traz as senhas como Varbinary, como posso converter ou descriptografar para senha correta do usuário?

    Abraços.

    segunda-feira, 27 de agosto de 2012 18:26
  • Caio,

    Sinceramente acredito que você não consiga descriptografar de forma direta, pois poderá representar uma vulnerabilidade de segurança.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 27 de agosto de 2012 18:28
    Moderador
  • Blz Junior,

    Vou procurar esta query da Proc que você informou para analisar.

    Obrigado desde já.... valeu mesmo pela força.

    segunda-feira, 27 de agosto de 2012 18:31
  • Boa Tarde,

    O próposito desse script é levar os mesmos usuários e as mesmas senhas (e ele o faz), mas não é possível descobrir quais são as senhas (a única certeza que você terá é que são as mesmas senhas). Se fosse possível descobrir, você teria um gravíssimo problema de segurança. O HASH é um caminho só de ida. Não será possível descriptografá-la.

    A senha está em VARBINARY e palavra HASHED serve justamente para informar que a sequencia em VARBINARY já está criptografada.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    segunda-feira, 27 de agosto de 2012 18:31
  • Estou questionando devido as senha não ter sido transferidas para o servidor de destino.

    Executei o Script como passado  anteriormente no servidor de ORIGEM, acho que estou deixando passar algum detalhe.

    Abraços

    segunda-feira, 27 de agosto de 2012 18:50
  • A dica do Gustavo foi:

    1) Rode o script no servidor de origem;

    2) Copie o resultado do Script;

    3) Cole no servidor de destino e execute.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 27 de agosto de 2012 18:54
  • Disfarça, funcionou... obrigado pela ajuda Roberson.
    segunda-feira, 27 de agosto de 2012 18:59
  • Caio,

    Obrigado pelo retorno.

    Post encerrado.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 27 de agosto de 2012 19:11
    Moderador