Seguramente te ha pasado que al migrar una base de datos de SQL Server de un servidor a otro, haces tu backup usando Microsoft SQL Server Management Studio
, transfieres el archivo, y haces el restore en el nuevo servidor. Todo parece perfecto, pero cuando vas a crear tu usuario obtienes el siguiente error:
User, group, or role '' already exists in the current database. (Microsoft SQL Server, Error: 15023)
Entonces expandes tu base de datos, vas al nodo Security -> Users, buscas el usuario, y lo intentas borrar, pero entonces aparece otro error:
Drop failed for User ''. (Microsoft.SqlServer.Smo). The database principal owns a database role and cannot be dropped. (Microsoft SQL Server, Error: 15421)
En este punto te das cuenta de que el usuario está “huérfano” (orphaned), y una solución para darle la vuelta al problema es crear un nuevo usuario con otro nombre, asignarlo a la base de datos, y modificar el nombre del usuario en el Connection String
de tu aplicación.
Pero existe una manera de solucionar las cosas correcta y fácilmente.
Abre una ventana de query
en tu base de datos y teclea lo siguiente para ver los usuarios huérfanos:
EXEC sp_change_users_login 'Report'
Si ves a tu usuario ahí significa que efectivamente está huérfano y para deshuerfanizarlo 😉 teclea lo siguiente:
EXEC sp_change_users_login 'Auto_Fix', 'user'
Modificando user
por el nombre de tu usuario.
Y listo, asunto totalmente solucionado, no tienes que crear nuevos usuarios ni modificar las Connection Strings
de tus aplicaciones.
Por último, si quieres crear un nuevo usuario para esta base de datos, usa:
EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'