SQL Server 2008 R2错误:15023,用户,组或角色已经存在


16

我的测试数据库存在权限问题。
我无法访问报告数据库,应用程序的帮助文档说要执行以下操作:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

当我这样做时,出现以下错误:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

我已经用谷歌搜索了这个错误,并在每个数据库上尝试了以下命令:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

该消息表明命令已成功完成,但是当我按照上面的说明尝试映射每个数据库时,仍然出现上述错误。

我想念什么?

根据Kin的评论(感谢),我尝试了以下操作:-我右键单击用户并选择:脚本登录为>拖放并创建为>新建查询窗口。-我运行了结果查询,并尝试通过再次选择其他两个数据库和db_owner来映射用户角色,但仍收到与上面相同的错误消息。

想法??

Answers:


12

您可以尝试多种方法,每种方法的成功都可能取决于您所担任的服务器角色。

对于初学者而言,老实说,如果只有一个或两个用户,最简单的方法是从已还原的数据库中删除数据库用户,并提供已经存在的服务器登录名,然后使用SSMS将数据库用户重新映射到服务器登录名。如果服务器登录名不存在,则只需创建它,映射用户,然后保存!走开

下一个选项:如果要迁移大量用户,请使用sp_help_revlogin。sp_help_revlogin是Microsoft提供的存储过程,它将帮助将登录名从一台服务器迁移到另一台服务器,包括密码和SID。这是一篇不错的文章SP_HELP_REVLOGIN


support.microsoft.com/en-us/kb/918992如何在SQL Server实例之间传输登录和密码
詹姆斯詹金斯

3

我使用Auto_Fixsp_change_users_login在我的开发环境来解决这些问题(错误15023)。避免在对安全敏感的情况下使用Auto_Fix。

Auto_Fix:将当前数据库中sys.database_principals系统目录视图中的用户条目链接到同名的SQL Server登录名。如果不存在相同名称的登录名,则会创建一个。检查Auto_Fix语句的结果,以确认实际上已建立正确的链接。避免在对安全敏感的情况下使用Auto_Fix。

sp_change_users_login 'AUTO_FIX', 'myuser'

另外,请注意,在将来的Microsoft SQL Server版本中可能会删除此功能。

其他参考:

  1. 当前数据库中已存在SQL Server 2008用户,组或角色
  2. FIX:错误15023:当前数据库中已经存在用户
  3. SQL将登录名映射到现有用户

0
ALTER USER [<username>] WITH LOGIN=[<username>]

是正确的做法。

否则转到:

安全>登录>(您的用户名)>属性>用户映射

在此处输入图片说明

并将该用户重新映射到所需的数据库。

您可以在数据库的上下文中使用以下查询来检查孤儿:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.