Prevenir usuarios huérfanos

Aprende como crear tus logins en SQL Server para evitar problemas de usuarios huérfanos al transferir datos entre servidores.

En 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 problema.

A modo de resumen, un usuario huérfano es el que no está relacionado con un login. Esto es muy común cuando movemos bases de datos entre diferentes servidores o cuando tenemos un sistema de alta disponibilidad que replica las bases de datos como el Always On o el Log Shipping. Aunque tengamos logins con el mismo nombre en ambos servidores no tienen el mismo SID. Como ya habréis podido adivinar para no tener más este problema deberemos asignar al login el mismo SID, pero esto solo se puede hacer recreando el login.

Averiguar el SID de un usuario por script

Lo primero que haremos será crear el login normalmente en uno de los servidores. Si ya tenemos los logins creados en ambos servidores lo borraremos de uno de ellos. Con el login creado en solo uno de los servidores usaremos este script para ver el SID:

select name, sid from sys.sql_logins

Copiaremos el sid de nuestro login y cuando vayamos a crearlo en el otro servidor le indicaremos que use ese SID de la siguiente manera

CREATE LOGIN batman WITH PASSWORD = 'G0th@m', SID = 0x8FB57BD6DA61BA40ABAB2A41DDC91A41

Scriptar la contraseña

En el ejemplo anterior hemos creado un login con un SID concreto y una contraseña. Hemos podido hacer esto porque conocíamos la contraseña del usuario pero, en la vida real, esto no siempre es tan bonito. Con SQL no vamos a poder ver las contraseñas de los usuarios en texto plano pero, esto tampoco significa que no podamos hacer nada. Usando la misma vista de antes sys.sql_logins podemos obtener la contraseña cifrada.

select name, sid, password_hash from sys.sql_logins

Con el HASH de la contraseña y el SID recrearemos el login de la siguiente manera:

CREATE LOGIN batman WITH PASSWORD = 0x0200B240435023921FCBA909DCF2136C27F81D0A4BEADBFBB5286E0511C8CF490BFAB9002EE881A8E7423195571D933AB189A9CB3EB5109C78A0789436811F6C833D8233B8B6 HASHED , SID = 0x8FB57BD6DA61BA40ABAB2A41DDC91A41

Copia masiva de logins

Para recrear varios inicios de sesión de golpe podemos hacer uso del procedimiento almacenado sp_help_revlogin. Para poder usarlo primero copiaremos el código del procedimiento desde la web oficial de Microsoft y lo ejecutaremos en nuestra instalación. Con ejecutar el procedimiento tendremos el script para recrear todos los logins con el mismo SID y contraseña.

Conclusión

Hemos aprendido cómo saber el SID y la contraseña cifrada de nuestros logins para transferirlos a otros servidores sin miedo a generar usuarios huérfanos. Esto es muy útil cuando mueves bases de datos entre servidores de manera periódica, como cuando refrescas un servidor de preproducción pero es imprescindible en instalaciones de alta disponibilidad donde en caso de balanceo tiene que ser transparente para los usuarios.

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.

1 comentario

[…] mueves bases de datos entre servidores. Recuerda también que tenemos un artículo explicando «como prevenir usuarios huérfanos» en el que explicamos otros métodos para evitar este […]

Deja una respuesta