Migración de logins en SQL Server. An easy way

logo_gps

Hoy vamos a hablaros de una problemática a la que todo DBA antes o después se va a encontrar, como es migrar una instancia de SQL Server a otra, bien sea por una actualización de software o hardware u otro motivo. Una de las tareas a realizar es migrar los logins para que los nuevos usuarios puedan acceder a la nueva instancia o servidor. Estos logins deben mantener el mismo password que en la instancia actual y no necesitamos conocerla para crearlos en el nuevo entorno. Veamos como hacerlo:

PASO 1

En primer lugar debemos conocer la versión que estamos usando en la instancia origen, para ello no puede servir la consulta: «SELECT @@version«. Esta consulta nos devolverá los detalles de la versión de SQL Server y de SO instalada. Según el resultado deberemos ejecutar una consulta u otra. 

Para versiones SQL Server 2000 o anteriores:

SELECT 'CREATE LOGIN '+name+ ' WITH PASSWORD = ' + 
master.dbo.fn_varbintohexstr (PASSWORD) + ' HASHED'
FROM SYSXLOGINS where dbid=<id_de_la_DDBB>

Para versiones SQL Server 2005 o superiores:

SELECT 'CREATE LOGIN '+name+ ' WITH PASSWORD = ' +
 CONVERT(varchar(max), LOGINPROPERTY(name, 'PasswordHash'),1 ) + 
 ' HASHED'
FROM sys.server_principals
WHERE type = 'S'

Este script lo podéis ejecutar sin miedo ya que por sí solo no realiza ningún cambio. En ambos casos genera la consulta CREATE por cada login con la contraseña encriptada, la única diferencia es la forma de obtener los datos. 

PASO 2

Una vez que tenemos las consultas CREATE generadas, tan solo habría que ejecutarlas en la instancia destino. Para ello las pegamos en el editor de SQL Server Management Studio. Es importante antes de ejecutar,fijarse que no haya un login ya creado en la instancia destino con el mismo nombre. En ese caso, el editor de SQL Server Management Studio, subrayará el nombre del login de color rojo. En caso de haber alguno, habría que decidir si eliminar el login actual y crear el login «antiguo» o bien, mantener el actual. Esta casuística, en la que haya un login ya creado os ocurrirá casi con toda probabilidad con el usuario sa, que es el usuario predeterminado con todos los permisos de SQL Server.

Esperamos que esta entrada os haya sido de ayuda,

Equipo de base de datos