Ocasionalmente, movo um banco de dados (SQL Express 2012) de uma máquina de desenvolvimento para um servidor, ou vice-versa, usando backup e restauração de banco de dados no SQL Server Management Studio.
Sempre que faço isso, os aplicativos na máquina de destino não podem acessar o banco de dados até que eu exclua o usuário que eles usam, "george", dos usuários do banco de dados (Banco de dados, Segurança, Usuários no SQL Server Management Studio) e o adicione novamente como proprietário em Segurança, Logins, george/propriedades, mapeamento de usuários.
Existe uma maneira melhor de fazer isso? Parece um pouco complicado.
Esta é a diferença entre logins e usuários e como eles se relacionam:
O que geralmente acontece com logins autenticados por SQL e usuários de banco de dados em uma restauração é que o SIDS ficará fora de sincronia, quebrando assim o relacionamento. Esse relacionamento deve ser reparado antes que você possa se conectar ao banco de dados usando esse logon, porque aos olhos do SQL Server essas entidades não estão mais conectadas. Você pode corrigir isso com o seguinte SQL:
Você pode usar a seguinte consulta no contexto de seu banco de dados para verificar se há órfãos:
Aqui está uma solução que funcionou para mim. O que ele faz é:
EXEC sp_change_users_login 'REPORT'
EXEC sp_change_users_login 'UPDATE_ONE','<userName>','<userName>'
Você pode procurar alterar o banco de dados para banco de dados independente . O usuário do banco de dados contido é autenticado pelo banco de dados, não no nível da instância por meio de login. Torna mais simples mover o banco de dados para diferentes instâncias.
Caso contrário, você pode fazer backup das informações de logon usando scripts sp_help_revlogin fornecidos neste KB de suporte da Microsoft . E execute o script de saída na nova instância.
Eu uso o script abaixo para migrar/criar as contas de usuário e logins. Execute-o a partir do servidor para o qual você restaurou o banco de dados e forneça o nome do servidor original como um parâmetro para o procedimento.
Não assumo nenhum crédito pelo procedimento, pois o obtive de outro lugar, mas funciona bem.
Você sempre pode tentar vincular novamente todos os usuários no banco de dados a logins com nomes semelhantes no servidor de banco de dados.
Achei que valia a pena notar essa simples correção para o problema dos pôsteres. Este é o script que executo no SQL Server 2008 quando restauro um banco de dados de produção de um servidor para o banco de dados de desenvolvimento/teste em outro servidor QUANDO o nome de Usuários está em Segurança > Usuários do banco de dados MAS
'login name'
falta a propriedade de usuários no Guia geral:Referência do MSDN aqui Observe que o artigo recomenda o uso de ALTER USER em vez de versões mais recentes do SQL.