SQLServer 报错:用户、组或角色在当前数据库中已存在

4次阅读
没有评论

还原MS SQLServer数据库,新建登录名,给登录名做用户映射,出现下面类似提示

SQLServer 报错:用户、组或角色’XXX’ 在当前数据库中已存在

问题原因

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

可以把登录名与数据库用户看作两个不同的用户,虽然名字相同,却是两个性质不一样的用户账户。

解决办法

把孤立账户与登录名关联起来

Use [数据库名]

go

sp_change_users_login 'update_one', '用户名', '登录名'

举例说明

数据库Test,新建登录名u_test,原有孤立用户名u_test

关联孤立用户语句


Use [Test]

go

sp_change_users_login 'update_one', 'u_test', 'u_test'

补充

MS SQLServer 孤立帐户,是指某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

孤立帐户的产生原因:
1.将备份的数据库在其它机器上还原;
2.重装系统或SQL SERVER之后只还原了用户库