Esta pergunta já foi feita antes, mas não vi nenhuma resposta ( https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login-sql-server )
Como mapear um login para um usuário, quando o usuário foi originalmente criado usando a opção de tipo de usuário "Usuário SQL sem login" na GUI? Estou usando o SQL Server 2012
Ao selecionar o usuário SQL sem login na caixa de diálogo criar usuário do SSMS, este é o T-SQL gerado (sem outras opções além do nome de usuário fornecido):
Se você fosse criar um login e tentar alterar o usuário com o novo login, como na seguinte tentativa:
Você obterá o seguinte erro:
Por causa disso, não acho que você possa vincular um login a esse tipo de usuário sem recriá-lo. Deve ser relativamente indolor, pois você pode apenas criar um script para o usuário, mas alterar os parâmetros de
WITHOUT LOGIN
qualquer login para o qual deseja mapeá-lo.EDIT : Conforme apontado por Aaron abaixo, verifique se você está anotando as permissões e associações de função antes de fazer qualquer alteração. Você deve garantir que pode voltar ao estado de permissões em que está atualmente, se esse for o comportamento desejado.
Por algum motivo, esses tipos de usuários não podem ser vinculados novamente usando "alter user", conforme declarado na resposta de Thomas Stringer .
Por inspeção, a caixa de diálogo do SSMS mostra "usuário SQL sem login" quando sys.database_principals.authentication_type = 0 ou 1 (e possivelmente outros).
Observando que a força bruta também não funciona:
A necessidade pode vir de um ambiente em que, para algum banco de dados específico, é comum enviar apenas mudanças de esquema em uma direção e puxar bancos de dados inteiros em outra:
Os próprios bancos de dados carregam todos os usuários para que a lista de diffs (por exemplo, Redgate) fique próxima de 0. Permissões em objetos tendem a ser listadas com cada objeto para ferramentas de diff como RedGate. Além disso, alguns usuários podem ser listados como "executar como" de um SP.