Al migrar instancias de SQL Server, uno de los pasos más propensos a errores es transferir los logins de SQL al destino. Simplemente crear un script de login con CREATE LOGIN ... WITH PASSWORD no preservará el hash de contraseña original ni el SID original — y los SID que no coincidan entre los logins de la instancia y los usuarios de la base de datos romperán la conectividad de la aplicación aunque la contraseña sea correcta.
Por qué importan los SID
Cada login de SQL Server tiene un SID (Identificador de Seguridad) almacenado a nivel de instancia. Los usuarios de la base de datos se asignan a los logins mediante este SID. Si crea un login en el destino con un nuevo SID generado automáticamente, los usuarios de la base de datos dentro de las bases de datos restauradas quedarán huérfanos — existirán pero no estarán vinculados a ningún login válido. La solución es crear scripts de logins con su SID original y el hash de contraseña desde el origen.
Consulta rápida: SID y hash de contraseña desde el origen
Ejecute esto en la instancia de origen como miembro del rol sysadmin. Las cuentas sin privilegios de administrador verán una salida incompleta o ninguna salida. El resultado es el SID binario sin procesar y el hash de contraseña — use la salida para construir la sentencia CREATE LOGIN en el destino con la palabra clave HASHED.
SELECT
name,
CONVERT(VARCHAR(50), 'CREATE LOGIN [' + name + '] WITH PASSWORD=') AS stmt_prefix,
CAST(password AS VARBINARY(26)) AS password_hash,
'HASHED, SID=' AS sid_prefix,
CAST(sid AS VARBINARY(26)) AS sid
FROM sys.syslogins
WHERE password IS NOT NULL;
Para un procedimiento completo de migración de logins listo para producción que gestione tanto logins de Windows como logins de SQL en distintas versiones de SQL Server (2005, 2008, 2012+), consulte el artículo relacionado: Migración masiva de bases de datos: el procedimiento completo. Ese procedimiento incluye la función auxiliar fn_hexadecimal que convierte valores binarios a las cadenas hexadecimales que espera CREATE LOGIN ... WITH PASSWORD = 0x... HASHED.
Después de la migración, ejecute sp_change_users_login 'Report' en cada base de datos restaurada para identificar los usuarios huérfanos restantes que necesitan ser revinculados.








