Published on

December 12, 2007

Migración de bases de datos en SQL Server: Tratando con usuarios huérfanos

La migración de bases de datos entre diferentes servidores es una tarea común para los administradores de bases de datos. Sin embargo, durante el proceso de migración, uno de los problemas que a menudo surge es el concepto de usuarios huérfanos. Los usuarios huérfanos ocurren cuando el Identificador de Seguridad (SID) del inicio de sesión de SQL en la tabla master..syslogins no coincide de un servidor a otro.

Para comprender mejor este problema, consideremos un escenario en el que tenemos dos instancias de SQL, SQL1 y SQL2. Crearemos una base de datos de prueba llamada Test_DB en ambas instancias y crearemos dos inicios de sesión, TestLogin1 y TestLogin2, con derechos de usuario para la base de datos Test_DB.

Después de crear la base de datos y los inicios de sesión, podemos consultar las tablas del sistema (vistas del sistema) en la base de datos master para comparar los SIDs de los inicios de sesión en ambas instancias. También podemos consultar la tabla del sistema sysusers (vista del sistema) en la base de datos Test_DB para ver los SIDs de los usuarios.

En este punto, los SIDs de los inicios de sesión son diferentes para cada instancia de SQL. Si intentamos conectarnos a la base de datos Test_DB en cualquiera de las instancias utilizando el inicio de sesión TestLogin1 o TestLogin2, podremos acceder a la base de datos sin problemas.

Ahora, avancemos unas semanas. Hemos estado utilizando SQL1 como nuestro servidor de desarrollo y SQL2 como nuestro servidor de producción. Nos estamos preparando para migrar la base de datos Test_DB de SQL1 a SQL2. Después de restaurar la base de datos en SQL2, notamos que los SIDs de los usuarios en la base de datos Test_DB no coinciden con los SIDs de los inicios de sesión en la tabla master..syslogins en SQL2.

Como resultado, cuando intentamos conectarnos a la base de datos Test_DB en SQL2 utilizando el inicio de sesión TestLogin1 o TestLogin2, nos encontramos con un mensaje de error que indica que el principal del servidor no puede acceder a la base de datos en el contexto de seguridad actual.

Para resolver este problema, podemos utilizar el procedimiento almacenado sp_change_users_login proporcionado por Microsoft. Este procedimiento almacenado nos permite sincronizar los valores de SID para los inicios de sesión de SQL. Podemos utilizar la acción “Update_One” del procedimiento almacenado para vincular un usuario especificado en la base de datos actual a un inicio de sesión existente en la tabla syslogins de la base de datos master.

Utilizando un cursor simple, podemos recorrer todos los inicios de sesión de SQL en la base de datos Test_DB y conciliar sus valores de SID con los inicios de sesión correspondientes en la base de datos master. Este proceso asegura que los usuarios en la base de datos estén correctamente vinculados a los inicios de sesión a nivel de instancia.

Es importante tener en cuenta que solo los inicios de sesión de SQL pueden quedar huérfanos. Se recomienda utilizar la seguridad integrada siempre que sea posible para evitar este problema. Además, vale la pena mencionar que se debe tener precaución al depender de las tablas del sistema, ya que pueden estar sujetas a cambios en futuras versiones de SQL Server.

En conclusión, la migración de bases de datos entre instancias de SQL Server puede ser una tarea compleja, especialmente cuando se trata de usuarios huérfanos. Sin embargo, al comprender el concepto de usuarios huérfanos y utilizar el procedimiento almacenado sp_change_users_login, los administradores de bases de datos pueden gestionar y resolver eficazmente este problema durante el proceso de migración.

Como dijo William Shakespeare una vez: “Es mejor tres horas antes que un minuto tarde”. Esta cita nos recuerda la importancia de abordar y resolver problemas de manera proactiva, como tratar con usuarios huérfanos durante la migración de bases de datos.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.