No SQL Server, como crio um logon para um usuário existente?

17

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

Sei como criar novos logins para novos usuários, mas como faço para criar logons para usuários existentes?

epotter
fonte

Respostas:

9

O problema é que a restauração recupera 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 logons de usuário. Você os verá em Segurança no nível do banco de dados, mas eles não têm logins correspondentes no nível do servidor.

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

Existem algumas maneiras de fazer isso:

  1. Crie novos logins para eles na nova instância. Você precisará removê-los como usuários do banco de dados na nova instância e adicionar seus novos logins. Isso parece estranho, pois 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, entre instâncias, use o procedimento armazenado sp_help_revlogin . 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 irá gerar um script SQL que você pode executar no servidor de destino para criar os mesmos usuários carregando SIDs, senhas, tudo. Este é o caminho a seguir, se você tiver muitos usuários de banco de dados, precisará se reconectar na instância de destino ou se não souber senhas para um ou mais Logins SQL na instância de origem.

squillman
fonte
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 ao logon do servidor:

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

Aaron Daniels
fonte
Legal, eu usei isso: em EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';vez disso. :)
user2173353
Isso não é possível apenas se você tiver o login do usuário e do servidor do banco de dados, mas o link entre eles estiver quebrado?
wenzzzel 20/03
2

Aqui está o que eu encontrei.

Como squillman esperava, os usuários são copiados com o banco de dados, mas os logins não. Existe um procedimento de loja chamado sp_change_users_login que você pode usar para resolver o problema. As etapas para isso são detalhadas neste artigo . Detalhes do uso do procedimento da loja podem ser encontrados nesta página .

epotter
fonte
2

No SQL Server 2012, existe um comando T-SQL para atribuir usuários existentes a novos logons. Crie o logon, mas não tente fazer mapeamentos de usuários (isso falharia). Em seguida, execute:

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

Isso mapeará o logon existente para o novo usuário. Documentação SQL aqui: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

erguer
fonte