none
Logins - Linked Server - Desastre RRS feed

  • Pergunta

  • Boa tarde,

    Tive uma situação de desastre em um servidor, tenhos os backups dos bancos que estavam em produção e os bancos de sistema (master, model e msdb).

    Restaurei os backups dos bancos e não os de sistemas, porem perdi os Logins e Linked Servers.

    Restaurei os bancos master e msdb com outro nome e fui em busca dessas informações, porem sem sucesso!

    Alguém sabe alguma forma de recuperar os Logins e Linked Servers sem precisar restaurar os bancos de sistema.

    sexta-feira, 11 de abril de 2014 18:29

Respostas

  • Ramos,

    Então cara colega, tantos as contas de logins como também, informações sobre Linked Server, estão armazenadas nos bancos de sistema do SQL Server e neste somente a solução é esta que você esta tentando restaurar os bancos de sistema.

    Um solução chata mas que funciona é instalar um novo SQL Server em outra máquina, fazer o restore destes bancos de sistema nesta nova instalação e exportar as contas de logins de um servidor para outro.

    Através da Ferramenta Business Intelligence Development Studio é possível fazer o exporte das contas de logins entre servidores.

    Há alguns anos eu utilizei estes scripts para realizar alguns testes de migração:

    SELECT
     'CREATE LOGIN ' + QUOTENAME(NAME) +
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' FROM WINDOWS'
     ELSE ' WITH PASSWORD = ' + 
      SYS.FN_VarBinToHexStr(CAST(LOGINPROPERTY(NAME,'PasswordHash') As VARBINARY(MAX))) + ' HASHED' +
      ' , SID = ' + SYS.FN_VarBinToHexStr(CAST(SID As VARBINARY(MAX))) + ' , '
     END +
     
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' WITH '
     ELSE '' END +
     
     'DEFAULT_DATABASE = ' + default_database_name + ', ' + 
        'DEFAULT_LANGUAGE = ' + default_language_name
    FROM SYS.server_principals
    WHERE TYPE_DESC IN ('SQL_LOGIN','WINDOWS_LOGIN','WINDOWS_GROUP')
    Já utilizei para migrar logins de 2005 para 2008, de 2008 para 2008 e funcionou muito bem. Infelizmente para o 2000 não é tão simples, mas dá pra fazer também.
     
    A parte de privilégios pode ser montada programaticamente também com o script abaixo:
     
    SELECT state_desc + ' ' + permission_name + ' TO ' +
    QUOTENAME(Name) COLLATE Latin1_General_CI_AS_KS_WS,
    p.permission_name,
    p.state_desc, s.name
    FROM sys.server_permissions p
    INNER JOIN sys.server_principals s ON
    p.grantee_principal_id = s.principal_id
    


    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]

    • Marcado como Resposta ramos_sa terça-feira, 10 de junho de 2014 14:17
    quarta-feira, 7 de maio de 2014 12:58
    Moderador

Todas as Respostas

  • Para restaurar os logins e linked server será necessario restaurar o banco "master"?
    segunda-feira, 14 de abril de 2014 13:15
  • Não existe forma de recuperar o linked server ou logins?
    segunda-feira, 28 de abril de 2014 17:52
  • Ramos,

    Então cara colega, tantos as contas de logins como também, informações sobre Linked Server, estão armazenadas nos bancos de sistema do SQL Server e neste somente a solução é esta que você esta tentando restaurar os bancos de sistema.

    Um solução chata mas que funciona é instalar um novo SQL Server em outra máquina, fazer o restore destes bancos de sistema nesta nova instalação e exportar as contas de logins de um servidor para outro.

    Através da Ferramenta Business Intelligence Development Studio é possível fazer o exporte das contas de logins entre servidores.

    Há alguns anos eu utilizei estes scripts para realizar alguns testes de migração:

    SELECT
     'CREATE LOGIN ' + QUOTENAME(NAME) +
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' FROM WINDOWS'
     ELSE ' WITH PASSWORD = ' + 
      SYS.FN_VarBinToHexStr(CAST(LOGINPROPERTY(NAME,'PasswordHash') As VARBINARY(MAX))) + ' HASHED' +
      ' , SID = ' + SYS.FN_VarBinToHexStr(CAST(SID As VARBINARY(MAX))) + ' , '
     END +
     
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' WITH '
     ELSE '' END +
     
     'DEFAULT_DATABASE = ' + default_database_name + ', ' + 
        'DEFAULT_LANGUAGE = ' + default_language_name
    FROM SYS.server_principals
    WHERE TYPE_DESC IN ('SQL_LOGIN','WINDOWS_LOGIN','WINDOWS_GROUP')
    Já utilizei para migrar logins de 2005 para 2008, de 2008 para 2008 e funcionou muito bem. Infelizmente para o 2000 não é tão simples, mas dá pra fazer também.
     
    A parte de privilégios pode ser montada programaticamente também com o script abaixo:
     
    SELECT state_desc + ' ' + permission_name + ' TO ' +
    QUOTENAME(Name) COLLATE Latin1_General_CI_AS_KS_WS,
    p.permission_name,
    p.state_desc, s.name
    FROM sys.server_permissions p
    INNER JOIN sys.server_principals s ON
    p.grantee_principal_id = s.principal_id
    


    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]

    • Marcado como Resposta ramos_sa terça-feira, 10 de junho de 2014 14:17
    quarta-feira, 7 de maio de 2014 12:58
    Moderador