Share via


How to Fix Orphan Users for ALL User Databases

**1.      **  Execute the following stored procedure which should be created within the Master database.

**/**************************************************************
This procedure should be created in the Master database. This procedure takes no parameters. It will remap orphaned users in the current database to EXISTING logins of the same name. This is useful in the case a new database is created by restoring a backup to a new database, or by attaching the datafiles to a new server.
**

**BEGINNING OF SCRIPT
***************************************************************/
**USE master

go
IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.sp_fixusers
IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL
PRINT '<<< FAILED DROPPING PROCEDURE dbo.sp_fixusers >>>'
ELSE
PRINT '<<< DROPPED PROCEDURE dbo.sp_fixusers >>>'
END
GO
CREATE PROCEDURE dbo.sp_fixusers
AS
BEGIN
DECLARE @username varchar(25)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name FROM sysusers
WHERE issqluser = 1 and (sid is not null and sid <> 0x0)
and suser_sname(sid) is null
ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
IF @username='dbo'
BEGIN
EXEC sp_changedbowner 'sa'
END
ELSE
BEGIN
EXEC sp_change_users_login 'update_one', @username, @username
END
FETCH NEXT FROM fixusers
INTO @username
END
CLOSE fixusers
DEALLOCATE fixusers
END
go
IF OBJECT_ID('dbo.sp_fixusers') IS NOT NULL
PRINT '<<< CREATED PROCEDURE dbo.sp_fixusers >>>'
ELSE
PRINT '<<< FAILED CREATING PROCEDURE dbo.sp_fixusers >>>'
go

/*************************************************************

END OF SCRIPT

*************************************************************/

Use the Query Tool to execute the following in the environment that needs orphan users fixed.

-- BEGINNING OF SCRIPT

select 'USE ['+NAME+']; exec sp_fixusers;'

from master..sysdatabases where name not in ('master','model','msdb','tempdb')

-- END OF SCRIPT

3.       Take the output generated in step #2 and execute it in the Query Tool in the same environment.  This should resolve your orphan users.