Un escenario típico:
Compañero: Che, necesito que me restaures la base del servidor de QA.
Yo: Sip, no hay problema.
Yo (al rato): Listo!
Compañero: Hey! No puedo ingresar!!
YO: *!*&^%$$£”!”£$%”£$
Típicamente, me olvido de restaurar los permisos de los usuarios después de recuperar una base.
Entonces, para ayudarme a hacerlo, me escribi este scrpcito:
DECLARE @loop int = 1
DECLARE @username sysname
DECLARE @orphanedusers TABLE (id int identity (1,1),
UserName sysname, UserSID varchar(36))
INSERT INTO @orphanedusers ([UserName], [UserSID])
EXEC sp_change_users_login 'report'
WHILE @loop <= (SELECT MAX(id) FROM @orphanedusers)
BEGIN
SET @username = (SELECT UserName FROM @orphanedusers WHERE id = @loop)
IF @username IN (SELECT name FROM master .sys.[syslogins])
BEGIN
exec sp_change_users_login 'auto_fix',@username
END
SET @loop = @loop + 1
ENDBasado en la nota de myhumblesqltips.blogspot.com.ar