Transferir inicios de sesión SQL para usuarios con un gran número de inicios de sesión autenticados SQL

Los inicios de sesión SQL Server son las credenciales que permiten a los usuarios conectarse con la instancia del Motor de la Base de Datos. Los inicios de sesión SQL se distinguen basados en el tipo del método de autenticación: autenticación Windows, autenticación SQL Server, Certificados y Claves Asimétricas. Un inicio de sesión SQL puede ser mapeado a sólo un usuario en cada base de datos.

Los usuarios de la base de datos representan la entidad de un inicio de sesión SQL Server cuando está conectado a la base de datos. Un usuario de la base de datos se redirige a un inicio de sesión SQL Server excepto en el caso de que las bases de datos contenidas donde los usuarios pueden conectarse a una base de datos sin autenticar un inicio de sesión al nivel del Motor de la Base de Datos. Debido al aislamiento desde el Motor de la Base de Datos que contiene las bases de datos, este puede ser movido fácilmente a otra instancia de SQL Server.

En una base de datos no contenida, cuando se está realizando una migración SQL desde una instancia de SQL Server a otra, los inicios de sesión SQL también deben ser migrados para prevenir que los usuarios de base de datos configurados para esa base de datos se conviertan en huérfanos. Un usuario huérfano es un usuario sin un inicio de sesión SQL correspondiente.

Un inicio de sesión SQL es requerido para acceder a SQL Server. Un inicio de sesión SQL sin un usuario correspondiente en una base de datos específica no puede conectarse a una base de datos, aunque puede conectarse a un servidor y un usuario huérfano no puede conectarse a un servidor.

La información acerca del mapeo de un inicio de sesión SQL Server a un usuario de base de datos incluye el nombre del usuario de la base de datos y el Security ID (SID) del inicio de sesión SQL correspondiente:

Illustration showing the mapping of a SQL Server login to a database user

El Asistente Import and Export no puede ser usado para copiar inicios de sesión desde una instancia SQL Server a otra. También, crear copias de seguridad y restaurar una base de datos no copia los datos de inicios de sesión porque los inicios de sesión SQL son almacenados fuera de la base de datos.

Transferir inicios de sesión SQL usando el Asistente Copy Database

Para usar el Asistente Copy Database (Copy Database Wizard) para migrar los inicios de sesión SQL:

  1. Conéctese a las instancias SQL Server fuente y destino e SQL Server Management Studio.
  2. Inicie SQL Server Agent en la instancia SQL Server destino.
  3. Haga clic derecho en la base de datos en la instancia SQL Server fuente desde la cual usted desea transferir los inicios de sesión SQL, haga clic en Tasks y seleccione el comando Copy Database para iniciar el Asistente Copy Database.
  4. En la página Source Server, especifique la instancia fuente SQL Server y haga clic en el botón Next.
  5. En la página Select A Destination Server, especifique la instancia destino SQL Server y haga clic en el botón Next.
  6. En la página Select Server Objects, donde usted elige qué objetos copiar, los inicios de sesión están seleccionados por defecto:

    Transfer SQL logins by using the Copy Database Wizard

Note que la página Select Server Objects está disponible en el asistente sólo si la fuente y el destino son servidores diferentes. Este método no copiará sólo los inicios de sesión, también copiará la base de datos entera.

Transferir inicios de sesión SQL usando Script Login como método

Usar Script como función en SQL Server Management Studio es una manera simple de recrear inicios de sesión SQL autenticados en Windows.

Para crear un script para transferir un inicio de sesión SQL en una nueva instancia:

  1. En el panel de Object Explorer expanda el nodo de Security->Logins.
  2. Haga clic derecho en el inicio de sesión SQL que desea migrar y elija el comando Script Login As->CREATE To->New Query Editor Window:

    Transfer SQL logins by using the Script Login As method

Esto creará un script en una ventana de consultas que puede ser ejecutado en la instancia destino SQL Server. En caso de inicios de sesión autenticados con SQL, estos inicios de sesión están en estado deshabilitado y con una contraseña al azar:

USE [master]
GO

/* For security reasons the login is created disabled and with a random password. */
/****** Object:  Login [dnnuatuser]    Script Date: 2/28/2015 2:40:23 AM ******/
CREATE LOGIN [dnnuatuser] WITH PASSWORD=N'î覫ù±_K¨_þèDÙ=^R|''î_ƒK¤_¶qù[(', DEFAULT_DATABASE=[AdventureWorks2014], 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO

ALTER LOGIN [dnnuatuser] DISABLE
GO

En este caso será necesario reiniciar las contraseñas asociadas a los inicios de sesión SQL antes de que el usuario asociado con el inicio de sesión pueda conectarse. También un inicio de sesión necesita ser habilitado porque incluso después de reiniciar una contraseña el principal asignado a un inicio de sesión no podrá iniciar la sesión en la instancia destino:

Error message - login to a destination instance has failed

En caso de que los usuarios con un gran número de inicios de sesión autenticados con SQL, cada inicio de sesión necesita ser codificado, cada contraseña reiniciada y habilitada manualmente.

Transferir inicios de sesión SQL usando el script publicado en el artículo de Microsoft Knowlegde Base KB918992

Microsoft provee un script que creará dos procedimientos almacenados en la base de datos master: sp_hexadecimal y sp_help_revlogin. Para exportar inicios de sesión SQL desde una instancia SQL Server primero ejecute el procedimiento almacenado sp_help_revlogin:

EXEC sp_help_revlogin

La salida de este procedimiento es un script que debería ser ejecutado en la instancia destino para recrear los inicios de sesión exportados desde una instancia fuente. Este script también migra las contraseñas asociadas con los inicios de sesión usando la contraseña encriptada.

Si una instancia fuente SQL Server es sensitiva a mayúsculas y minúsculas y la instancia destino SQL Server es también sensitiva a mayúsculas y minúsculas, los usuarios deben escribir las contraseñas en mayúsculas después de transferir los inicios de sesión SQL y las contraseñas a la instancia en el servidor destino. En el caso contrario los usuarios no pueden iniciar sesión usando los inicios de sesión y las contraseñas transferidas a la instancia en un servidor destino a menos que las contraseñas originales no contengan letras o todas las letras en la contraseña original sean mayúsculas.

Si los inicios de sesión SQL son transferidos a una instancia destino de SQL Server en un dominio diferente, el script necesita ser editado. Note que los todos inicios de sesión integrados que tienen acceso en el nuevo dominio no tendrán el mismo SID que los inicios de sesión en el dominio fuente, y los usuarios de la base de datos para estos inicios de sesión se volverán huérfanos. También, un inicio de sesión que ya existe en la instancia SQL Server destino puede tener el mismo SID como un SID en el script de salida. En este caso, cuando un script de salida es ejecutado en la instancia destino, este reportará el siguiente mensaje:

Msg 15433, Level 16, State 1, Line 6
Supplied parameter sid is in use.

El script de salida del procedimiento sp_help_revlogin necesita ser cuidadosamente revisado antes de que se ejecute en una instancia destino.

Transferir inicios de sesión SQL usando ApexSQL Script

ApexSQL Script es una herramienta de migración de bases de datos SQL Server que codifica objetos de la base de datos en uno o varios scripts SQL, soluciones .NET o instaladores ejecutables. Usando ApexSQL Script usted puede crear un script SQL para migrar usuarios elegidos de la base de datos con todos los inicios de sesión SQL asignados.

Para transferir inicios de sesión SQL usando ApexSQL Script inicie un diálogo de nuevo proyecto, conéctese a una base de datos y bajo la pestaña Structure script seleccione la opción Script logins with users y haga clic en el botón Open:

Transfer SQL logins using ApexSQL Script

En la Cuadrícula de Resultados seleccione los usuarios para la migración y haga clic en el botón Script:

Click the Script wizard button in ApexSQL Script

Siga los pasos del asistente del Script hasta que el script es creado. El script crea los usuarios y los inicios de sesión correspondientes:

The SQL script creates both the user and the corresponding login

Ejecutar este script SQL en un dominio diferente no requiere cambios en el script porque ApexSQL Script permite elegir sólo usuarios e inicios de sesión. De todos modos, usted necesitará reiniciar las contraseñas para inicios de sesión autenticados por SQL Server manualmente. Los usuarios están en un estado habilitado y pueden iniciar sesión en una instancia destino:

Manual password reset is needed for SQL Server–authenticated logins

Recursos útiles:
Copy Database Wizard (Select Database Objects)
How to transfer logins and passwords between instances of SQL Server
Manage Metadata When Making a Database Available on Another Server Instance (SQL Server)
Basic SQL Server Security concepts – logins, users, and principals

Traductor: Daniel Calbimonte

octubre 27, 2015