bschelst/ February 11, 2019/ SQL-Server/ 0 comments

If you copy (backup/restore) a database from system A to system B, it is possible that the SQL users won’t be able login and this because the GUID/SID of the users on system A doesn’t match the GUID/SID of system B.

It is using the EXEC sp_change_users_login ‘Auto_Fix’, which inks 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. (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
Share this Post

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*

3 × 1 =