Encontrar usuários órfãos e remapeá-los para logins (após restore / AG)
SQL ServerSegurançaComando
USE [Musteri];
-- Database users without a matching login:
SELECT dp.name AS user_name, dp.type_desc, dp.authentication_type_desc, dp.sid, dp.create_date
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON sp.sid = dp.sid
WHERE sp.sid IS NULL
AND dp.type IN ('S', 'U', 'G')
AND dp.authentication_type_desc IN (N'INSTANCE', N'WINDOWS')
AND dp.principal_id > 4;
-- If a login with the same name exists, remap the SID:
ALTER USER [app_user] WITH LOGIN = [app_user];
-- Permanent fix: generate CREATE LOGIN with SID + password hash on the source, run it on the target:
SELECT N'CREATE LOGIN ' + QUOTENAME(sp.name)
+ N' WITH PASSWORD = ' + CONVERT(NVARCHAR(MAX), LOGINPROPERTY(sp.name, 'PasswordHash'), 1)
+ N' HASHED, SID = ' + CONVERT(NVARCHAR(MAX), sp.sid, 1)
+ N', CHECK_POLICY = OFF;' AS create_login_stmt
FROM sys.server_principals sp
WHERE sp.type = 'S' AND sp.name = N'app_user';O que faz
Encontra usuários do banco cujo SID não corresponde a nenhum login do servidor (órfãos); remapeia um usuário para um login existente e gera um script para recriar os logins em outro servidor com o mesmo SID e hash de senha.
Quando usar
Após restaurar/anexar um banco de dados em outro servidor, quando a aplicação recebe "Login failed for user" após um failover de AG/log shipping, ou durante uma migração de servidor.
Atenção
ALTER USER ... WITH LOGIN muda o SID do usuário para o do login; em um AG, essa mudança flui da primária para as secundárias, mas se os logins nos servidores secundários tiverem SIDs diferentes, o problema volta no próximo failover. A correção definitiva é criar os logins com o mesmo SID em todas as réplicas. O hash de senha é sensível; guarde o script com segurança. Usuários de contained database (authentication_type = DATABASE) não precisam de login e não são listados.
Relacionados
- Configurar TDE: master key, certificado, backup do certificado e progresso da criptografia
- Configurar o SQL Server Audit: logins, mudanças de permissão e acesso a tabelas
- Auditoria de logins e permissões: membros de sysadmin, permissões arriscadas, senhas fracas
- Criar uma ledger table, ler seu histórico de alterações e verificar a integridade