Impossible de créer l'user SQL Server

J'essaie de résoudre un problème avec l'ajout d'un user à une database SQL Server. Appelons cet user Login A La connection A est un count Windows AD. Je continue d'get l'erreur suivante.

Msg 15063, niveau 16, état 1, ligne 1
Le login a déjà un count sous un nom d'user différent

Un peu d'arrière-plan: j'ai d'abord créé cette database avec Login A sur une machine. Je l'ai ensuite restauré sur une autre machine qui était connectée avec l'user B. Maintenant, lorsque j'essaie d'append l'user A à l'instance restaurée, j'obtiens cette erreur.

D'après ce que je peux dire, l'user A n'existe pas dans l'instance restaurée. Je ne le vois pas dans la table sys.server_principals ou sys.database_principals . De plus, si j'essaie de me connecter en tant qu'user, j'obtiens un message d'échec de connection. Où cet user se cacherait-il?

Il semble que l' User A est orphelin. Voici un script qui va détecter les users orphelins et créer un script drop afin de les supprimer correctement. Vous devriez alors pouvoir recréer l' User A correctement.

 DECLARE @SQL nvarchar(2000) DECLARE @name nvarchar(128) DECLARE @database_id int SET NOCOUNT ON; IF NOT EXISTS (SELECT name FROM tempdb.sys.tables WHERE name like '%#orphan_users%') BEGIN CREATE TABLE #orphan_users ( database_name nvarchar(128) NOT NULL, [user_name] nvarchar(128) NOT NULL, drop_command_text nvarchar(200) NOT NULL ) END CREATE TABLE #databases ( database_id int NOT NULL , database_name nvarchar(128) NOT NULL , processed bit NOT NULL ) INSERT #databases ( database_id , database_name , processed ) SELECT database_id , name , 0 FROM master.sys.databases WHERE name NOT IN ('master' , 'tempdb' , 'msdb' , 'dissortingbution' , 'model') WHILE (SELECT COUNT(processed) FROM #databases WHERE processed = 0) > 0 BEGIN SELECT TOP 1 @name = database_name, @database_id = database_id FROM #databases WHERE processed = 0 ORDER BY database_id SELECT @SQL = 'USE [' + @name + ']; INSERT INTO #orphan_users (database_name, user_name, drop_command_text) SELECT DB_NAME() , u.name , ' + '''' + 'USE [' + @name + ']; ' + 'DROP USER [' + '''' + ' + u.name + ' + '''' + '] ' + '''' + ' FROM master..syslogins l RIGHT JOIN sysusers u ON l.sid = u.sid WHERE l.sid IS NULL AND issqlrole <> 1 AND isapprole <> 1 AND ( u.name <> ' + '''' + 'INFORMATION_SCHEMA' + '''' + ' AND u.name <> ' + '''' + 'guest' + '''' + ' AND u.name <> ' + '''' + 'dbo' + '''' + ' AND u.name <> ' + '''' + 'sys' + '''' + ' AND u.name <> ' + '''' + 'system_function_schema' + '''' + ')' PRINT @SQL; EXEC sys.sp_executesql @SQL UPDATE #databases SET processed = 1 WHERE database_id = @database_id; END SELECT database_name , [user_name] , drop_command_text FROM #orphan_users ORDER BY [database_name] , [user_name]; DROP TABLE #databases; DROP TABLE #orphan_users; SET NOCOUNT OFF;