No SQL Server, como faço para criar um login para um usuário existente?

15

Eu restaurei um banco de dados de uma instância do SQL Server em uma instância diferente do SQL Server. O banco de dados já tem usuários adicionados a ele. Mas eles não têm login para a nova instância do SQL Server.

Eu sei como criar novos logins para novos usuários, mas como criar login para usuários existentes?

    
por epotter 31.08.2010 / 14:31

4 respostas

7

O problema é que a restauração traz de volta os usuários do banco de dados da instância original do servidor, mas a nova instância normalmente não sabe nada sobre esses logins de usuários. Você os verá em Segurança no nível do banco de dados, mas eles não têm logins no nível do servidor correspondentes.

Você precisa reconectar os usuários do banco de dados com logins do servidor na instância em que você restaurou o banco de dados.

Existem algumas maneiras de fazer isso:

  1. Crie novos logins para eles na nova instância. Você terá que removê-los como usuários do banco de dados na nova instância e adicionar seus novos logins. Isso parece estranho, já que você pode criar os mesmos nomes de login, mas os SIDs (identificadores de segurança) serão diferentes e é isso que o SQL usa para identificação do usuário. Isso é fácil o suficiente para um ou dois logins.

  2. Se você deseja manter os mesmos usuários, mantendo os mesmos SIDs nas instâncias, use o sp_help_revlogin procedimento armazenado. Copie o código do link que criará os procedimentos armazenados necessários e execute-o no servidor do qual você deseja copiar os usuários. Ele gerará um script SQL que você pode executar no servidor de destino para criar os mesmos usuários que transportam SIDs, senhas, tudo. Esse é o caminho a percorrer se você tiver muitos usuários do banco de dados que precisa se reconectar na instância de destino ou se não souber senhas para um ou mais Logins do SQL na instância de origem.

por 31.08.2010 / 14:44
10

Eu sempre executo o comando sp_change_users_login com a ação 'Update_One' para vincular novamente o usuário do banco de dados com o login do servidor:

sp_change_users_login 'Update_One', 'database user', 'server login '

    
por 31.08.2010 / 15:16
2

Aqui está o que eu encontrei.

Como squillman expained, os usuários são copiados com o banco de dados, mas os logins não. Existe um processo da loja chamado sp_change_users_login que você pode usar para resolver o problema. As etapas para fazer isso estão detalhadas em este aritcle . Detalhes de como usar o processo da loja podem ser encontrados em esta página .

    
por 31.08.2010 / 15:11
1

A partir do SQL Server 2012, há um comando T-SQL para atribuir usuários existentes a novos logins. Crie o login, mas não tente fazer Mapeamentos de Usuários (isso falharia). Então execute:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Isso mapeará o login existente para o novo usuário. Documentação SQL aqui: link

    
por 18.04.2018 / 15:23