Restaurei (COMPLETO) um banco de dados usando SSMS para um novo servidor. Quando fiz isso, recebemos erros indicando que a conta não conseguiu fazer login, provavelmente devido a um SID incorreto, pois confirmamos que a conta foi transferida durante a restauração e tinha as permissões apropriadas. Tentamos excluir e adicionar novamente o usuário através da GUI do SSMS e recebemos os mesmos erros de login de nosso aplicativo (o usuário não existe). Para corrigir isso, a única solução que consigo encontrar é especificar a criação do login com um SID específico, como mostra a consulta abaixo. Quando executo isso, o SQL Server parece ter um problema com o "" no domínio. Não consigo encontrar outra maneira de especificar isso que funcione. Estou faltando sintaxe? Como fazer login em uma conta de serviço AD com um SID especificado se o sintático "" não for aceito?
CREATE LOGIN [AD_DOMAIN\login]
WITH PASSWORD = 'password_here', SID = SID_HERE;
SELECT * FROM sys.sql_logins WHERE name = 'AD_DOMAIN\login';
GO
Neste ponto seria mais fácil apenas criar uma nova conta de serviço no AD, mas perguntando aqui para ver se estou perdendo alguma coisa estúpida....
Ao restaurar o banco de dados para um novo servidor, você também precisa migrar os logins para o servidor de destino. Aqui está o que você pode fazer para remapear corretamente os logins:
Opção 1: A maneira mais rápida é usar o método “transferir login” da Microsoft, o método tradicional. usando o proc armazenado
sp_help_revlogin
. Leia atentamente e siga o artigo, pois ele irá orientá-lo sobre como transferir os logins. O artigo também inclui um link sobre como solucionar problemas de usuários órfãos .Opção 2: Instalar
dbatools
. Este é um módulo comunitário do PowerShell projetado para migração de banco de dados SQL Server, embora ofereça muito mais do que apenas isso. Eu recomendo dar uma olhada. Instruções para instalação manual podem ser encontradas no site. Depois de instalado, você pode usar oCopy-DbaLogin
comando para transferir todos os logins ou logins específicos. Existe um parâmetro chamado-NewSid
que pode gerar novos SIDs no servidor de destino — isso é útil ao copiar logins para o mesmo servidor. ORepair-DbaDbOrphanUser
pode remapear e corrigir a incompatibilidade de login. Esta é minha opção preferida.Opção 3: Como você mencionou, outra opção é remover o login e recriá-lo. Eu não recomendo esta opção.
Para uma solução rápida, use sp_help_revlogin . No entanto, recomendo fortemente investir tempo explorando toda a gama de recursos que ele
dbatools
oferece. Fazer isso sem dúvida trará benefícios significativos no longo prazo, garantindo operações de banco de dados perfeitas e facilidade de gerenciamento.Sim. Verifique o tipo de login consultando sys.database_principals https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-principals-transact-sql?view=sql- servidor-ver16
Se o tipo for 'G' ou 'U' você deverá criar login como
https://learn.microsoft.com/en-us/sql/t-sql/statements/create-login-transact-sql?view=sql-server-ver16
Somente se o tipo for usuário SQL 'S' você deverá fornecer a senha ou SID