Usuarios Huérfanos en SQL Server

Los usuarios huérfanos son uno de los problemas más comunes en bases de datos SQL Server, aprende hoy como corregirlos.

Uno de los problemas más comunes cuando restauramos una base de datos de otro SQL es el de los usuarios huérfanos, vamos a ver por qué sucede y cómo solucionarlo. Antes de empezar quiero pedir perdón por el chiste malo de la foto de portada. Una vez hecho vamos a ver un poco de teoría para entender el por qué del problema y veamos como solucionarlo.

Usuarios y Logins en SQL Server

Tenemos que diferenciar los logins para acceder al servidor de los usuarios de bases de datos. Es un poco complicado, pero cuando nosotros creamos un login (inicio de sesión) sólo tendrá acceso a SQL Server sin acceder a las bases de datos. Para acceder a las bases de datos necesitaremos un usuario creado en esa base de datos y enlazado al login del servidor. 

En SQL Server tenemos dos tipos de usuarios, usuarios de windows y usuarios de SQL. Esos usuarios tienen un nombre que vemos y un identificador único con el que trabaja SQL Server. En el caso de los usuarios de windows se usa el identificador (SID) de windows (gestionado por el directorio activo o por el equipo). En el caso de los usuarios de SQL se creará un SID para el login y se usará ese mismo SID para crear un usuario en las bases de datos a las que se conceda acceso.

Usuarios huérfanos 

Sabiendo ya la diferencia entre usuarios y logins es sencillo entender el problema. Un usuario huérfano es un usuario sin login asociado. Como hemos comentado esto es muy común a la hora de mover bases de datos de un servidor a otro, pues aunque tengan los mismos usuarios lo normal es que no tengan los mismos SID. Puede pasar también en un mismo servidor, por ejemplo si borramos un login, lo volvemos a crear y no borramos los usuarios para recrearlos desde el nuevo login. 

Arreglar usuarios huérfanos

Cuando nos encontramos con este error, no podremos dar permisos al login sobre la base de datos porque aunque no tengan el mismo SID ya hay un usuario con ese nombre y los nombres de usuario deben ser únicos. La solución tampoco sería borrar el usuario para crearlo desde la ventana de logins porque perderíamos todos los permisos asignados en la base de datos y habría que volver a hacer ese trabajo. Para cuando esto pasa, SQL Server tiene una herramienta, en forma de procedimiento almacenado de sistema que localiza y corrige los usuarios huérfanos. 

Ejemplo

Como veréis en las siguientes capturas, en mi base de datos de pruebas tengo los usuarios Batman, Spiderman, Harry Potter y Superman pero en el servidor solo tengo el login Spiderman. Todos los usuarios de base de datos son huérfanos, los 3 primeros porque no existe su login padre y Superman porque, aunque existe, no están enlazados.

Localizar usuarios huérfanos

Usaremos el procedimiento almacenado con el parámetro report para localizar los usuarios huérfanos.

EXEC sp_change_users_login 'Report'

Como era de esperar el resultado del reporte nos muestra nuestros cuatro usuarios huérfanos.

Usuario y login existentes sin relación

Para corregir el problema usaremos el procedimiento almacenado con el parámetro Auto_Fix. En caso de que exista un login con el mismo nombre que nuestro usuario bastará con poner el nombre del usuario y se enlazarán.

EXEC sp_change_users_login 'Auto_fix', 'superman'

No existe el login

Cuando no exista un login con el mismo nombre podremos usar también el parámetro Auto_Fix, esta vez lo acompañaremos del nombre de usuario y la contraseña para el login que vamos a crear. 

EXEC sp_change_users_login 'Auto_fix', 'batman', NULL, 'BatContr@seña.123'

Conclusión

Hoy has aprendido qué son y por qué se producen los usuarios huérfanos y, lo más importante, como corregir este problema que es uno de los más comunes en bases de datos SQL Server. Como siempre para cualquier duda o sugerencia te emplazo dejarlo en los comentarios, mi email o nuestro twitter.

Publicado por Roberto Carrancio

Mi nombre es Roberto Carrancio y soy un DBA de SQL server con más de 10 años de experiencia en el sector. Soy el creador del blog soydba.es donde intento publicar varios artículos a la semana (de lunes a viernes que los fines de semana me gusta estar con mi gente y disfrutar de mi moto) Espero que disfrutes leyendo este blog tanto como yo disfruto escribiendo y que te sea de utilidad. Si tienes alguna sugerencia, pregunta o comentario, puedes dejarlo al final de cada entrada o enviarme un correo electrónico. Estaré encantado de leerte y responderte. ¡Gracias por tu visita! Mi principal interés es compartir mi conocimiento sobre bases de datos con todo el que quiera aprenderlo. Me parece un mundo tan apasionante como desconocido. Fuera de lo profesional me encanta la cocina, la moto y disfrutar de tomar una cervecita con amigos.

3 comentarios

[…] el anterior post aprendimos lo que eran y cómo corregir el problema de usuarios huérfanos, sin embargo, como es mejor prevenir que curar, vamos a aprender cómo prevenir el […]

[…] bases de datos entre distintos servidores SQL Server, es común encontrarse con un problema de usuarios huérfanos ya que los sid de los logins pueden diferir entre los distintos servidores. Para evitar este […]

[…] Los usuarios se utilizan para gestionar permisos dentro de una base de datos, controlando el acceso a tablas, procedimientos almacenados y otros objetos. Cada usuario de base de datos puede estar asociado a un inicio de sesión o no, pero un inicio de sesión puede estar asociado a múltiples usuarios en diferentes bases de datos. Cuando un usuario no está asociado a un inicio de sesión decimos que está huérfano.  […]

Deja una respuesta