SQLServer 报错:用户组或角色'XXX' 在当前数据库中已存在. 错误:15023解决方法

Posted 春之野草,秋之落叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer 报错:用户组或角色'XXX' 在当前数据库中已存在. 错误:15023解决方法相关的知识,希望对你有一定的参考价值。

分析:    
将数据库恢复到其他服务器时,数据库中包含一组用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户。    
这种情况被称为存在“孤立用户”。此时是不能通过新建登录或者是对同名登录授予对应数据库的“用户”权限来解决登录问题,    
因为SQLServer会报出“错误15023:当前数据库中已存在用户或角色”,

 

简单理解:

数据库备份文件中已经包含了用户test,现在还原了数据库,然后发现现有数据库中没有test这个用户,想要新建一个test用户,作为该数据库的owner,便会出现这个问题。

可以理解为登录名和用户是两个不同的概念,虽然名称相同。在新建登录名的时候,如果不添加该数据库映射则不会报错。添加数据库映射相当于给该数据库添加一个同名用户。

但是已经存在了test这个用户了,所以此时会报错。

 

解决方法:

可以通过以下方法解决该问题。

1.新建一个test登录名,但是不要添加数据库映射。

2.使用脚本,将孤立用户test关联到登录名test上:

Use [数据库名]

go

sp_change_users_login \'update_one\', \'test\', \'test\'

sqlserver迁移数据

将sqlserver2000的备份数据迁移到sqlserver2005时使用数据库对应的用户video315无法访问指定的数据库
报错:
用户、组或角色 ‘video315‘ 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
参考:https://www.cnblogs.com/douxuyao/p/3530052.html

查看sqlserver的安全性-----》登录名中video315的属性发现用户对应的数据库是没有授权的,手动授权无法生效

在新建的查询中执行
use v315db
go
sp_change_users_login ‘update_one‘,‘video315‘,‘video315‘ 之后再次测试可以使用用户video315访问对应的数据库v315db了

操作完成之后查看用户授权是更新的
技术分享图片

以上是关于SQLServer 报错:用户组或角色'XXX' 在当前数据库中已存在. 错误:15023解决方法的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver报错22022

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

SQL 2008R2问题:用户组或角色'XXX'在当前数据库中已存在?

对登录名进行用户映射时,提示“用户组或角色在当前数据库中已存在”问题

sqlserver 创建数据库的权限是哪个

sqlserver迁移数据