Um problema comum:
Você restaura um backup numa nova instância e ao tentar conceder as permissões para seus usuários encontra o seguinte erro:
User, group, or role ‘nome_do_usuario‘ already exists in the current database.
(No fim deste post está disponível um arquivo contendo base e scripts utilizados neste cenário.)
Ou seja, o login já existe na instância e ao tentar defini-lo como usuário da base, o SQL reclama que ele já é um usuário da base de dados; no entanto, ao tentar conectar no banco com este usuário o SQL Server adverte que o mesmo não tem permissões para se conectar:
Msg 916, Level 14, State 1, Line 1
The server principal “nome_do_usuario” is not able to access the database “nome_do_banco” under the current security context.
… assim não é possível conceder permissões ao usuário e nem utilizá-lo.

Normalmente este problema ocorre porque o login em questão já era usuário da base de dados em sua instância de origem. Ao restaurar o backup em outra instância, onde o mesmo login existe, o SQL Server não estabele um link automático entre o login pré-existente e o usuário que veio junto com base restaurada; assim surgem os usuários órfãos.
Veja que é um problema muito comum, no entanto, muitas pessoas tentam resolve-lo apagando o usuário da base e recriando novamente a partir do login; no entanto, ao fazer isto, perceba que perdemos todas as configurações atribuídas àquele usuário na base determinada, como permissões e etc.
Para solucionar este problema adequadamente utilizamos o procedimento: sp_change_users_login
Inicialmente podemos executar a procedure (dentro da base restaurada) com o seguinte parâmetro:
EXEC sp_change_users_login 'Report';
Com este parâmetro o procedimento irá mostrar todos os usuários órfãos da sua base; ou seja, usuários que existem na sua base de dados, mas que não possuem um login correspondente:

Para solucionar efetivamente o problema, executamos a procedure com diferentes parâmetros. No exemplo abaixo, executamos a procedure passando como parâmetro o nome do usuário órfão e o login correspondente. Ao executá-lo, o SQL Server estabelece uma relação entre ambos:
EXEC sp_change_users_login
'Update_One',
'usuario42', 'usuario42';
Note que o nome do login e do usuário não precisam ser iguais, no entanto é muito comum utilizamos o mesmo nome para logins e usuários, então para abreviar a solução podemos utilizar somente:
EXEC sp_change_users_login 'Auto_Fix', 'usuario42';
Assim o SQL Server entende que a relação deverá ocorrer entre um usuário e um login de mesmo nome.
Este procedimento pode ser utilizado também quando você possuir um usuário, mas ainda não possuir um login correspondente criado; assim em um único comando é possível cadastrar o novo login, atribuir sua senha e estabeler a relação entre eles; veja o exemplo:
EXEC sp_change_users_login
'Auto_Fix',
'usuario42', NULL,
'@#mochil3ir0'; -- senha
Conclusão
Neste post entendemos o que são usuários orfãos e como estabeler vínculos entre logins e usuários de banco de dados utilizando o procedimento sp_change_users_login. Este procedimento tem diferentes comportamentos de acordo com os parâmetros passados. Utilizar este procedimento simplifica a configuração da sua base de dados e mantém todas as características de seus usuários previamente configuradas.
Para simular este erro e sua solução, baixe este arquivo contendo a base e script do cenário.
Até +