Asociar usuarios a login SQL Server al restaurar

Escrito por Programador ASP clásico en SQL Server


Arrelgar usuarios huérfanos en SQL Server al restaurar una base de datos.

Síntoma: Al restaurar una base de datos en SQL Server a otro servidor, nos encontramos con el siguiente error al iniciar sesión:

Error de inicio de sesión del usuario ‘james’.

Al revisar en el Management Studio vemos que el usuario está en la base de datos y que tiene los permisos correctos en sus tablas pero sin embargo no existe en los Inicios de Sesion del Server. Voy a “nuevo inicio de sesion (james) > contraseña (contraseña)> base de datos predeterminada (contabilidad)” En la Pestaña “Asignacion de Usuarios” activo la casilla “Asignar” > Base de Datos (mi_base)” y me da el siguiente error:

TÍTULO: Microsoft SQL Server Management Studio —————————— Error de Crear para Usuario ‘james’. (Microsoft.SqlServer.Smo) Excepción al ejecutar una instrucción o un proceso por lotes Transact-SQL. (Microsoft.SqlServer.ConnectionInfo) El usuario, el grupo o la función ‘james’ ya existe en la base de datos actual. (Microsoft SQL Server, Error: 15023)

 

Explicación:

Al restaurar las bases de datos no se crean automáticamente los login de los usuarios de dicha base de datos. Cuando importas una base de datos en un SQL Server, se crean automáticamente los usuarios de la base de datos. Es de obligación crear de forma manual los login en la base de datos para que los usuarios externos o las aplicaciones puedan acceder al motor de la base de datos e inmediatamente vincular la base de datos que van a utilizar para su utilización. Nos encontramos el problema de que los Login, no están asociados a la bbdd que acabamos de restaurar ya que el esquema que has importado es diferente al que estamos utilizando para actualizar el esquema y asociar los login a los usuarios de la bases de datos modificando el nombre de los objetos de la bbdd, puedes hacerlo de una forma sencilla para no tener que hacerlo desde el SQL Management Studio de uno en uno. Aclaremos que no es lo mismo un Login de SQL que un usuario de BBDD. El login: te permite acceder al motor de la bbdd y ver las bases de datos, pero no puedes entrar en ellas a no ser que tengas usuarios en las bbdd y el login esté vinculado con ese usuario.

 

Un usuario de BBDD: Debes de tener un login previo si quieres acceder a la bbdd. Para saber que usuarios de la bbdd no tiene login asociado, tienes que hacer la siguiente select sobre la bbdd que acabamos de restaurar o bien, sobre las que quieres verificar:

EXEC sp_change_users_login 'Report'

 

Una vez que sabemos cuales son los usuarios que no están vinculados, podemos ejecutar la siguinte consulta por cada uno de los usuarios:

EXEC sp_change_users_login 'Auto_Fix', 'user'

Otra forma de corregir el error es la siguiente:


USE NombreDeLaBaseDeDatos
GO
EXEC sp_change_users_login 'Update_One', 'nombre_usuario', 'nombre_inicio_sesion';

Publicado el 10/09/2014 a las 17:06:35 hrs. | 911 visitas.

Subir
Web hosting by Somee.com