SQL Server用户映射错误15023

时间:2016-10-26 07:19:14

标签: sql sql-server

我尝试通过转到安全>将我的其他数据库映射到用户登录>右键单击someuser>属性>用户映射>选择DB>设置为db_owner然后确定,但我继续收到错误说

  

用户,群组或角色' someuser'已存在于当前数据库中。 (Microsoft SQL Server,错误:15023)

导致错误的原因是什么,以及如何将该用户映射到数据库?

5 个答案:

答案 0 :(得分:41)

要修复用户和登录映射,您需要在SQL Server Management Studio中打开查询窗口。输入以下两行,并将myDB替换为数据库名称和myUser,并使用正确的用户名:

USE myDB

EXEC sp_change_users_login 'Auto_Fix', 'myUser'

如果成功运行,您应该获得如下输出:

The row for user '****' will be fixed by updating its login link to a login already in existence.

The number of orphaned users fixed by updating users was 1.

The number of orphaned users fixed by adding new logins and then updating users was 0.**

现在应该正确映射您的用户。

修改:

解决/修复孤立用户的新方法:

在master数据库中,使用带有SID选项的CREATE LOGIN语句重新创建缺少的登录名,提供数据库用户的SID。

CREATE LOGIN <login_name>   
WITH PASSWORD = '<use_a_strong_password_here>',  
SID = <SID>;  

要将孤立用户映射到master中已存在的登录名,请在用户数据库中执行ALTER USER语句,并指定登录名。

ALTER USER <user_name> WITH Login = <login_name>;  

当您重新创建缺少的登录时,用户可以使用提供的密码访问数据库。然后,用户可以使用ALTER LOGIN语句更改登录帐户的密码。

ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';  

答案 1 :(得分:5)

如果您为数据库用户分配权限而不先将其映射到数据库,则会抛出您提到的错误。

您应该能够删除用户,将其映射到数据库,然后将用户分配给db_owner角色。

答案 2 :(得分:3)

如果只有一个或两个用户,那么最简单的方法是从恢复的数据库中删除数据库用户,使用SSMS将数据库用户重新映射到服务器登录。如果服务器登录不存在,则只需创建它,映射用户。

选项2:如果要迁移大量用户,请使用sp_help_revlogin。 sp_help_revlogin是Microsoft提供的存储过程,可帮助将登录从一台服务器迁移到另一台服务器,包括密码和SID。这是一篇关于它的好文章SP_HELP_REVLOGIN:http://www.databasejournal.com/features/mssql/article.php/2228611/Migrating-Logins-from-One-SQL-Server-to-Another.htm

代码补丁有助于使用它: 在查询分析器中运行T-SQL查询。这将返回结果平台中数据库中的所有现有用户。

USE YourDB
GO
EXEC sp_change_users_login 'Report'
GO

在查询分析器中运行以下T-SQL查询,以将登录与用户名相关联。 “Auto_Fix”属性将在SQL Server实例中创建用户(如果该用户不存在)。在下面的例子中,'ColdFusion'是UserName,'cf'是密码。自动修复将当前数据库的sysusers表中的用户条目链接到sysxlogins中的同名登录名。

USE YourDB
GO
EXEC sp_change_users_login 'Auto_Fix', 'ColdFusion', NULL, 'cf'
GO

在查询分析器中运行以下T-SQL查询,以将登录与用户名相关联。 'Update_One'将当前数据库中的指定用户链接到登录。登录必须已存在。必须指定用户和登录名。密码必须为NULL或未指定

USE YourDB
GO
EXEC sp_change_users_login 'update_one', 'ColdFusion', 'ColdFusion'
GO

2)如果登录帐户有权删除其他用户,请在查询分析器中运行以下T-SQL。这将使用户失望。

USE YourDB
GO
EXEC sp_dropuser 'ColdFusion'
GO

在数据库中再次创建相同的用户,没有任何错误。

答案 3 :(得分:1)

首先删除用户,然后执行以下脚本:

USE [YOURDB]
GO
CREATE USER [USERNAME] FOR LOGIN [USERNAME]
GO
USE [YOURDB]
GO
ALTER USER [USERNAME] WITH DEFAULT_SCHEMA=[dbo]
GO

答案 4 :(得分:0)

我在尝试将生产数据库复制到本地测试数据库时遇到了问题。在 SSMS 中,我确保在本地执行脚本之前与生产服务器断开连接。然而,即使我认为我已经断开连接,但有人指出生产数据库的标题仍然存在,并且我得到对象已经存在的错误。解决方案是完全退出SSMS并重新启动它,当时只连接到本地测试数据库。