Error 15023: User already exists in current database.
1) This is the best Solution.
First of all run following T-SQL Query in Query Analyzer. This will return all the existing users in database in result pan.
USE YourDB
GO
EXEC sp_change_users_login 'Report'
GO
Run following T-SQL Query in Query Analyzer to associate login with the username. ‘Auto_Fix’ attribute will create the user in SQL Server instance if it does not exist. In following example ‘ColdFusion’ is UserName, ‘cf’ is Password. Auto-Fix links a user entry in the sysusers table in the current database to a login of the same name in sysxlogins.
USE YourDB
GO
EXEC sp_change_users_login 'Auto_Fix', 'ColdFusion', NULL, 'cf'
GO
Run following T-SQL Query in Query Analyzer to associate login with the username. ‘Update_One’ links the specified user in the current database to login. login must already exist. user and login must be specified. password must be NULL or not specified
USE YourDB
GO
EXEC sp_change_users_login 'update_one', 'ColdFusion', 'ColdFusion'
GO
2) If login account has permission to drop other users, run following T-SQL in Query Analyzer. This will drop the user.
USE YourDB
GO
EXEC sp_dropuser 'ColdFusion'
GO
Create the same user again in the database without any error.
Stored Procedure 1:
/*Following Stored Procedure will fix all the Orphan users in database
by mapping them to username already exist for user on server.
This SP is required when user has been created at server level but does
not show up as user in database.*/
CREATE PROCEDURE dbo.spDBA_FixOrphanUsers
AS
DECLARE @username VARCHAR(25)
DECLARE GetOrphanUsers 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 GetOrphanUsers
FETCH NEXT
FROM GetOrphanUsers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
IF @username='dbo'
EXEC sp_changedbowner 'sa'
ELSE
EXEC sp_change_users_login 'update_one', @username, @username
FETCH NEXT
FROM GetOrphanUsers
INTO @username
END
CLOSE GetOrphanUsers
DEALLOCATE GetOrphanUsers
GO
Stored Procedure 2:
/*Following Stored Procedure will fix all the Orphan users in database
by creating the server level user selecting same password as username.
Make sure that you change all the password once users are created*/
CREATE PROCEDURE dbo.spDBA_FixOrphanUsersPassWord
AS
DECLARE @username VARCHAR(25)
DECLARE @password VARCHAR(25)
DECLARE GetOrphanUsers 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 GetOrphanUsers
FETCH NEXT
FROM GetOrphanUsers
INTO @username
SET @password = @username
WHILE @@FETCH_STATUS = 0
BEGIN
IF @username='dbo'
EXEC sp_changedbowner 'sa'
ELSE
EXEC sp_change_users_login 'Auto_Fix', @username, NULL, @password
FETCH NEXT
FROM GetOrphanUsers
INTO @username
END
CLOSE GetOrphanUsers
DEALLOCATE GetOrphanUsers
GO
Stored Procedure 3:
----Following Stored Procedure will drop all the Orphan users in database.
----If you need any of those users, you can create them again.
CREATE PROCEDURE dbo.spDBA_DropOrphanUsers
AS
DECLARE @username VARCHAR(25)
DECLARE GetOrphanUsers 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 GetOrphanUsers
FETCH NEXT
FROM GetOrphanUsers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
IF @username='dbo'
EXEC sp_changedbowner 'sa'
ELSE
EXEC sp_dropuser @username
FETCH NEXT
FROM GetOrphanUsers
INTO @username
END
CLOSE GetOrphanUsers
DEALLOCATE GetOrphanUsers
GO
Reference : Pinal Dave (https://blog.sqlauthority.com )




129 Comments. Leave new
Hi,
I am trying to create a new login like this:
CREATE LOGIN [AAA\Sales] FROM WINDOWS WITH DEFAULT_DATABASE=[SalesINt], DEFAULT_LANGUAGE=[us_english]
and I am getting this error:
The server principal ‘AAA\Sales’ already exists.
This login doesn’t currently exist. AAA\Sales is a active directory distribution group. When I try to do the same thing on a different server, it works.
How I can create this user on my production sql server?
Thanks
Still working great, thanks much.
Your posting helped a lot.
Thanks.
thx fix my problem
Thanks a lot !!
It’s realy help us.Thanks for help
I am having 25 databases and I have to delete Orphan users for all, I cannot go on each database and run the drop script. Any idea how to make it dynamic?
i love you! that worked perfectly! thanks for your post!
you’re great, thanks!
How to map all the orphaned database users to sql logins at a time. Instead of using
sp_change_users_login ‘Auto_Fix’ suresh1, suresh1 for each user
Thanks! helped me a lot
This is awesome. Great solutions.
Thanks Dude
Thanks for posting the solution to this, it helped us out when we ran into this problem.
I appreciate it greatly and wish MS would address stuff like this better.
Your article is really helpful. Thank you.
Thanks. I really appreciate it.
I used it. It worked! Thanks you.
Thanks, It resolved the issue
Dear Sir,
I am using WINDOWS 2003 and DATABASE of MS SQL 7 version with great plains programme.
Please reply me urgently.
User cannot Mark company with database.
ERROR No.1 :
[Microsoft] {ODBC SQL Server Driver}[SQL Server] Server User TAJ is not a valid user DYNAMICS
[Microsoft] {ODBC SQL Server Driver}[SQL Server] Server User TAJ is not a valid user DYNAMICS
ERROR No.2:
[Microsoft] {ODBC SQL Server Driver}[SQL Server] User or Role ‘TAJ’ already exists ijn the current database.
ERROR No.3:
[Microsoft] {ODBC SQL Server Driver}[SQL Server] User or Role ‘TAJ’ does not exists.
ERROR No.4
A get /change first operation on table Sy_User_MSTR failed / accessing SQL data.
Thanks for your cooperation in this regsrds
SHAHID
Thank you for the script.
Thanks a lot. Solved my problem in a min! No wonder your site came first in Google search!