How to remap orphaned SQL Server users after a restore
If you copy (backup/restore) a database from system A to system B, it is possible that the SQL users won't be able to login, and this is because the GUID/SID of the users on system A doesn't match the GUID/SID of system B.
It uses the EXEC sp_change_users_login 'Auto_Fix', which links a user entry in the sys.database_principals system catalog view in the current database to a SQL Server login of the same name.
This code will fix all users in the database that you are executing the SQL code on. (I use this very often)
CREATE TABLE dbo.temp_OrphanUsers
(
UserName varchar(250) NULL,
UserSID varchar(500) NULL
) ON [PRIMARY]
INSERT INTO dbo.temp_OrphanUsers
EXEC sp_change_users_login 'Report'
DECLARE curOU CURSOR FOR
SELECT UserName FROM dbo.temp_OrphanUsers
OPEN curOU
DECLARE @OUUserName VARCHAR(250)
FETCH NEXT FROM curOU INTO @OUUserName
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
BEGIN TRY
EXEC sp_change_users_login 'Auto_Fix', @OUUserName
END TRY
BEGIN CATCH
PRINT 'Unable to auto-fix ' + @OUUserName + ' - User may not have a login'
END CATCH
END
FETCH NEXT FROM curOU INTO @OUUserName
END
CLOSE curOU
DEALLOCATE curOU
DROP TABLE temp_OrphanUsers
GO