none
Problema no Backup/Restore RRS feed

  • Pergunta

  • Boa tarde amigos,

    Não necessariamente seria um problema, mas estou executando um backup no meu servidor e está funcionando as mil maravilhas, tudo beleza! Porém, toda vez que vou executar um restore em um outro servidor, SEMPRE tenho de atribuir a permissao de usuário para acessar o banco restaurado.

    Acredito que tenha a ver com a versão do SQL Server 2008 R2 que, no banco que efetua o backup, está com a versao 10.50.1617 e o servidor do banco do restore, onde realizo os testes, está com a versão 10.50.1000 e com isso, perde as configurações realizadas no banco.

    Alguem já passou por isso e saberia me dar o caminho das pedras para resolver?

    Obrigado a todos!

    sexta-feira, 26 de setembro de 2014 16:23

Respostas

  • Boa tarde, José.

    Os usuários dos bancos de dados estão vinculados aos logins da instância, através do SID. Quando você cria um login, seu SID é gerado de forma aleatória, de modo que mesmo logins de nomes iguais, criados em instancias diferentes, terão seu SID diferente.

    Quando você restaura um banco de dados em uma nova instância, seus usuários estarão referenciando os SIDs dos logins da instância antiga, logo você é obrigado a dropar e recriar os usuários com os logins corretos.

    Uma solução seria dropar os LOGINS da instância onde você está fazendo os restores, e criá-los novamente com o parâmetro SID igual ao de seu login correspondente ao da instância de origem. Com os SIDs dos logins identicos entre as instâncias, você não terá este problema.

    Para obter os SIDs dos logins na instância de origem, execute a seguinte query:

    select name, sid from sys.server_principals
    where type in ('S', 'U')

    Para criar um login com um SID específico, execute:

    CREATE LOGIN [TESTE] WITH PASSWORD=N'senha', 
    DEFAULT_DATABASE=[master], 
    CHECK_EXPIRATION=OFF, 
    CHECK_POLICY=OFF, 
    SID = 0x4DCE496F7E95D2439D6279D8B76B014D

    Altere o SID acima para o SID do login da instância de origem.

    A partir do momento em que você criar o usuário de exemplo "TESTE" com o mesmo SID da instância de origem, ele passará a ter o acesso original às bases que você restaurar sem precisar de ações adicionais.

    sexta-feira, 26 de setembro de 2014 17:41

Todas as Respostas

  • José, 

    Se for permissões de usuários administrativos como o SA, você terá que adicionar a permissão apos o backup mesmo.

    Se for um usuário especifico para acessar a base com permissões na base, você precisa ter o mesmo usuário do servidor de origem no destino... antes de restaurar o backup.

    Não basta criar o usuário com o mesmo nome nos dois servidores, internamente eles terão ID diferentes, você tem que gerar um script do login do servidor de origem e executar no destino.... apos fazer isso sempre que restaurar o backup as permissões do usuários já estarão atualizadas.


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 26 de setembro de 2014 17:30
  • Boa tarde, José.

    Os usuários dos bancos de dados estão vinculados aos logins da instância, através do SID. Quando você cria um login, seu SID é gerado de forma aleatória, de modo que mesmo logins de nomes iguais, criados em instancias diferentes, terão seu SID diferente.

    Quando você restaura um banco de dados em uma nova instância, seus usuários estarão referenciando os SIDs dos logins da instância antiga, logo você é obrigado a dropar e recriar os usuários com os logins corretos.

    Uma solução seria dropar os LOGINS da instância onde você está fazendo os restores, e criá-los novamente com o parâmetro SID igual ao de seu login correspondente ao da instância de origem. Com os SIDs dos logins identicos entre as instâncias, você não terá este problema.

    Para obter os SIDs dos logins na instância de origem, execute a seguinte query:

    select name, sid from sys.server_principals
    where type in ('S', 'U')

    Para criar um login com um SID específico, execute:

    CREATE LOGIN [TESTE] WITH PASSWORD=N'senha', 
    DEFAULT_DATABASE=[master], 
    CHECK_EXPIRATION=OFF, 
    CHECK_POLICY=OFF, 
    SID = 0x4DCE496F7E95D2439D6279D8B76B014D

    Altere o SID acima para o SID do login da instância de origem.

    A partir do momento em que você criar o usuário de exemplo "TESTE" com o mesmo SID da instância de origem, ele passará a ter o acesso original às bases que você restaurar sem precisar de ações adicionais.

    sexta-feira, 26 de setembro de 2014 17:41
  • Samir,

    Farei este teste e assim que tiver uma resposta dos testes eu posto aqui se correu tudo certo!

    Realmente eu deveria ter analisado este ponto de vista, pois é a mesma regra para usuarios do Active Directory rs

    Porém, fica o aprendizado, que para mim é muito bom!

    Obrigado a todos penas informações e conhecimentos.

    sexta-feira, 26 de setembro de 2014 18:15